Swift中的可选类型(Optional)
2016-01-04 00:00
417 查看
转 Swift中的可选类型(Optional)
目录[-]Swift中的可选类型(Optional)
什么是Optional
Optional后面的?跟!是什么意思?
什么时候该用!?
什么时候该用??
总结
Swift中的可选类型(Optional)
什么是Optional
Optional在Swift中表示可选类型,那么什么是可选类型?我们都知道,在Swift中,属性的值都是不能为nil的,但是在正常情况下你不可能一开始就确定所有属性的值,又或者你根据条件查询数据,你要返回这条数据,但假如没有符合条件的数据,那该怎么办?
这时就可以使用可选类型,在Swift中,你想要让一个属性的值为nil,你必须使用Optional(可选类型),Optional其实是一个泛型enum(枚举),里面包含两种情况,一种是没有值,即nil,另外种是有值,就是你原类型的值,伪代码如下:
[code=plain]enum Optional<T> { case None case Some(T) }
至于为什么enum可以这么写?跟其他语言中的enum不一样?这个后面有空会专门写一篇。
那么要怎样使用Optional呢?其实很简单,只需要在定义属性时,在后面跟个?或者!即可,代码如下:
[code=plain]var str:String? println(str)
这段代码会输出nil
Optional后面的?跟!是什么意思?
对于类型而言,他们没有任何区别,都是表示一个Optional类型,他们的区别只是语法上的。?表示该属性是一个不确定值的属性,即该属性的值有可能为空 !表示该属性有值,解包当做原类型来使用,但如果该属性没有值时(即nil),会导致异常
什么时候该用!?
在你定义个一个属性,并且该属性的值在正常情况下不会为nil时,你应该直接在属性定义时使用!解包,方便后续使用,例如:[code=plain]/* 由于这个属性与storyboard中的UILabel关联了 所以在初始化UI的时候就会自动初始化这个属性,并赋值 也就是说这个属性默认情况下有值,且后续操作中都有值(假如你不设置为nil的话) 所以这里应该使用!来解包,以简化后续操作 */ @IBOutlet var label: UILabel! override func viewDidLoad() { super.viewDidLoad() //因为属性在定义时已经解包,所以这里直接当做原类型使用,即UILabel类型 label.text = "hello" }
如果将!改成?的话,就会出现下图的错误,提示你未解包,因为?表示这个属性值不确定,即有可能为nil,如果是nil,那肯定不能操作,所以会要求你进行解包,那你就需要在每次操作label属性时加上!进行解包,就显得很麻烦
什么时候该用??
在你定义一个属性,并且该属性的值在正常情况下可能为nil时,你应该在定义属性时使用?比如你要从数据库中获取一条记录,但该记录可能不存在,在后续的操作中,由于该属性是?(不确定值的属性),你在使用时必须要进行解包,这会提醒你该属性可能为nil,你需要判断他是否为nil,在进行相应的操作,以提高程序的健壮性
在没查询到结果的情况下:
在查询到结果情况下:
假如你在属性定义时使用了!,那么在后续操作中将不会提示你进行解包,你有可能会忘记该属性在正常情况下也会为nil,你直接把它拿来使用将会抛出异常。
总结
在Swift中Optional表示可选类型,可选类型的值可以为nil在类型后面加上?或者!即表示可选类型
如果一个属性在正常情况下可能为nil,那最好用?,这会在你使用时提示你需要解包,你就可以使用if解包并判断其是否为nil,能提升程序健壮性
如果一个属性在正常情况下不会为nil,那最好用!,可以方便后续操作
不确定值(?) -> 确定值(!)
[code=plain]var name:String? name = "Peter" println(name!)
相关文章推荐
- Swift可选值OptionalOptional 问号 感叹号
- FM音乐播放器 基于豆瓣 api,swift,alamofire,sqlite.swift 等
- Swift2.1-自动引用计数
- Swift Functional Programming Tutorial
- 使用swift开发OSX应用
- Swift控制手电筒操作(iOS)
- swift中通知的使用
- Swift开发IOS-UITextField
- swift2.0中文文档
- Swift -- 方法
- iOS二维码扫描的实现(Swift)
- Swift和OC的一些区别
- Swift开发:仿Clear手势操作(拖拽、划动、捏合)UITableView
- Swift 之数组与字典
- Swift-免费短信验证码实现及动态倒计时
- swift-switch使用方法
- Swift供选链接
- Collection Data Structures In Swift
- Swift学习之UIButton
- Swift继承