Swift-'as?','as'用法
何时使用 'as?'和'as'
让我们来继续为我们假象的UIKit应用写点代码。假设你需要出场(展示)一个新的modal view controller到手机的屏幕上(比如通过使用presentViewController(_, animated:, completion:)方法)。
//your custom view controller
class MyViewController: UIViewController {
var lastUpdated: NSDate? = nil
}
//in your master view controller
let myVC = MyViewController()
presentViewController(myVC, animated: true, completion: nil)
你定义了一个拥有名为lastUpdated的额外属性的自定义view controller。让我们认定你是想当这个controller一旦登场时这个属性就要被修改。你可以在main view controller上通过 presentedViewController方法获取这个出场了的controller:
controller.presentedViewController!.title = "New Title"
presentedViewController是optional类型的UIViewController? ,因而你可以便捷的解包取得它的值并且使用这个值。但是如果我想使用或改变仅仅是被定义在MyViewController而没有定义在UIViewController?的 lastUpdated该怎么做呢?
你可以通过as?把这样的对象转换成Optional类型,比如这样:
let myVC = controller.presentedViewController as? MyViewController
myVC?.lastUpdated = NSDate()
as?会尝试将值转换成给定的类型,而当这个过程不成功的时候便会返回一个nil对象。这就是为什么输出的结果总是一个optional 值。当你不能保证的转换成功时你不得不使用as?,比如你尝试把AnyObject或者Any value转换成一个实类(实体类)。
那么,简而言之,当你转换类型的时候可能失败时请使用as?。这非常有用。
与可能会出现转换错误时使用as?相对的,是当你可以101%保证转换会成功,你可以删除?直接使用as。
让我们来看看使用as的一些实用的例子。
想想这样一个情况,你正在计算一个农场里羊的数目。然而你通过一些错综复杂的数学方法获得了一个带有小数的结果,比如:
let sheepCount = 71/2.0
现在sheepCount是一个Double类型,包含35.5的数值。当你需要一个整数并且Double类型转换成Int类型是安全的时候(一定能成功的把浮点部分切除掉),你才可以像下面这样把结果转换成Int类型:
let sheepCount = 71/2.0 as Int
在这种情况下,才是把这对象转换成Int类型,也就是说sheepCount常量会被转换成Int类型(相比而言,在之前的例子里sheepCount是Double类型的)。
另一种关于as情况是当你使用switch语句进行模式匹配。在switch模式中有且仅当转换是成功的通常会用as代替as?。比如你不知道sheepCount是什么类型,你可以通过switch语法检测它的类型并且尝试在不同的情况下使用对应的类型:
switch sheepCount {
case let sheep as Int:
println("\(sheep) found")
case let sheep as Double:
println("oops - fractional sheep!")
default: break
}
在这个事例代码中,名为sheep的常量是一种非常复杂的类型——在前一种情况里是Int类型而在后一个情况里Double类型。
Swift-'as?','as'用法的更多相关文章
- Swift - enumerateObjectsUsingBlock的用法
enumerateobjectsusingblock:不是Array的方法在NSArray使用.如果你想使用它,你需要一个实例NSArray而不是Array. import Foundation va ...
- swift函数的用法,及其嵌套实例
import Foundation //swift函数的使用 func sayHello(name userName:String ,age:Int)->String{ return " ...
- Swift继承的用法
一个类可以继承另一个类的方法,属性和其它特性.当一个类继承其它类,继承类叫子类,被继承类叫超类(或父类).在Swift中,继承是区分「类」与其它类型的一个基本特征. 在Swift中,类可以调用和访问超 ...
- swift - UIAlertController 的用法
ios 8 以后苹果官方建议使用UIAlertController这个类,所以专门去网上找资料,了解了下用法, 1.创建一个alertController let alertController = ...
- swift - UIAlertView 的用法
1,创建一个alertview,并带有“确定”和“取消”两个按钮 (注:在这里使用alertview,会报警告,那是因为从ios 8 以后,建议使用UIAlertviewController) //警 ...
- swift - UISlider 的用法
swift的UISlider的用法和oc基本没有区别 1.创建 class SecondViewController: UIViewController { var slider = UISlider ...
- swift - UISegmentedControl 的用法
一.创建控件,并监听控件选择值 /*选项除了文字还可以是图片 as关键字的作用就是字面意思:类型转换*/ let items = ["选项一", "选项二", ...
- swift UILable的用法
- Swift - UITableView的用法
因为倾向于纯代码编码,所以不太喜欢可视化编程,不过也略有研究,所以项目里面的所有界面效果,全部都是纯代码编写! 终于到了重中之重的tableview的学习了,自我学习ios编程以来,工作中用得最多的就 ...
- swift - UIToolbar 的用法
代码如下: 1.声明及初始化 var toolsBar = UIToolbar() toolsBar.frame = CGRect(x:, y:, width:SCREEN_WIDTH, height ...
随机推荐
- 网络虚拟化(SDN,NFV..)和企业骨干网的演化
本来昨天就规划了今天的这篇文章,无奈昨天中午自己喝了将近一瓶的52度二锅头...晚上想着今天怎么着也完了,要颓废难受一天了...没想到早上居然一点都不难受了.于是就写下了本文.正文之前,还是做个广告, ...
- windows安装ruby,DevKit安装rails,svn安装
Ruby on Rails的安装,是从被称为RubyGems的包管理系统开始的.Ruby on Rails是由Ruby处理系统的类库的.被称为“gem”的格式来进行配置的.“gem”形式的类库,通过使 ...
- font-face自定义字体
做网站的时候,有时候会遇到某些字体系统里面没有自带.可能更多的时候我们会选择以图替文的方式来做.用图片的话不利于图片的放大缩小,更好的办法是我们可以自定义字体. 当然,在实际运用中我们需要权衡一下自定 ...
- Hbase建模
转自:http://blog.itpub.net/28912557/viewspace-1119865/ 什么情况下使用Hbase?1,成熟的数据分析主题,查询模式已经确定并且不易轻易改变.(主要还是 ...
- 登录centos虚拟机后显示-bash-4.1
http://zhidao.baidu.com/link?url=KwpGOdwFw1oxnL71pvPlfRgbRL_IuQeYRzIYJjiDb2SnX0dQye5yUXqHAGSyuD6u2nD ...
- 各个层次的gcc警告
http://blog.csdn.net/lizzywu/article/details/9419145 各个层次的gcc警告从上到下覆盖 变量(代码)级:指定某个变量警告 int a __attri ...
- Hibernate关系映射 一对一双向外键关联@OneToOne Annotation方式 双向关联和单向关联的区别
首先还是来构造一个实际应用的场景,比如实体类车辆(Car),它具有以下属性:Id,品牌(brand),车牌(lisencePlate):实体类车牌(LisencePlate),它具有以下属性:Id,号 ...
- jquery轻量级富文本编辑器Trumbowyg
html: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv=&qu ...
- 【树莓派】GSM900模块
python代码 https://github.com/JFF-Bohdan/sim-module
- Android学习笔记——Menu(三)
知识点 今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习. Popup Menu(弹出式菜单) 弹出式菜单是一种固定在View上的菜单模型.主要用于以下三种情况: 为特定的内容提 ...