可选型(optional)
来源:互联网 发布:广东体育网络体育直播 编辑:程序博客网 时间:2024/05/17 09:32
一个值,可能有值,也可能为nil,存在不确定性,即为可选型。
let possibleNumber = “三”let convertedNumber = Int(possibleNumber)//nillet possibleNumber2 = “123”let convertedNumber2 = Int(possibleNumber2)//123
如上,possibleNumber的值不一定能够转换成功,如果possibleNumber为字符或者字符串,则convertedNumber的值为nil,因此,possibleNumber为可选值
可选型的声明如下:
let possibleNumber : Int?
如果确认可选型的值不为nil,那么可以使用解包(!)的方式,获取它的值,如下:
possibleNumber=1if possibleNumber != nil{ print("possibleNumber不为空,值为:\(possibleNumber!)")}
我们为可选型的possibleNumber赋值为1,那么此时判断可选型不为nil,即可解包获取possibleNumber的值
可选绑定(optional binding)
使用可选绑定来判断可选值是否有值,如果有值,则赋给该值。
所谓的可选绑定,就是把可选型赋给一个变量或者常量,如果赋值后需要改变该值,则需要赋值给变量,否则赋给常量。如下
let possibleNumber : Int?possibleNumber = nilif let actualNumber = possibleNumber{ print("可选型的值为:\(actualNumber)")}else{ print("可选型的值为:nil")}
可以包含多个可选绑定在if语句中,并使用where子句做布尔值判断。
if let firstNumber = Int("4"),secondNumber = Int("42") where firstNumber < secondNumber { print("\(firstNumber)<\(secondNumber)")}
隐式解析可选
如上,可选暗示了常量或者变量可以为“nil”。
可选可以通过if来判断是否有值,如果有值,可以通过解包或者可选绑定来解析值。
有时候,在程序中,可选被第一次赋值后,可以确定为一个总有值的可选。但是每次都要判断和解析,则是非常低效的。因此,有一种类型被定义为:隐式解析可选(implicitly unwrapped optionals),不需要每次都解析,但是仍需要判断是否有值。因为隐式解析可选,如果没有值的情况下取值,会引发运行时异常。具体办法看后面的两种解决方式。
//普通解析可选var possibleString : String? = "普通解析可选"print("字符串:\(possibleString!)")
//隐式解析可选var possibleString2 : String! = "隐式解析可选"print("字符串:\(possibleString2)")
注意:如果在隐式解析可选没有值的情况下尝试取值,会触发运行时错误。(顺带,如果在普通解析可选没有值的情况下,取值时加上!,也会触发错误)因此,有以下两种解决方法:
//判断是否为空var possibleString3 : String!if possibleString3 != nil{ print("隐式解析可选,值为:\(possibleString3)")}else{ print("隐式解析可选,值为:nil")}
//通过可选绑定判断是否为空possibleString3 = "隐式解析可选有值"if let possible = possibleString3{ print("隐式解析可选:\(possibleString3)")}else{ print("隐式解析可选,值为:nil")}
注意:
1、你可以把隐式解析可选当做是一个自动解析的可选,只是把解析的感叹号放到类型的末尾,而不是每次解包的时候放到可选名字的后面。
2、swift中的nil和objective-c中的nil并不一样。在objective-c中,nil是一个指向不存在对象的指针。在swift中,nil不是指针,它是一个确定的值,用来表示值缺失,任何类型的可选都可以被设置为nil,不只是对象类型。
3、一个变量如果之后可能变为nil的话,不要使用隐式解析可选。如果需要在变量的生命周期中判断是否是nil的话,使用普通可选类型。(意思就是说,不要瞎费劲,根据实际情况选择解析可选的类型)。
4、当可选被第一次赋值之后一直有值的时候,隐式解析可选非常有用。隐式解析主要被用在swift中类的构造过程中,具体后面我在补充。
- 可选型(optional)
- swift 4.1 可选型optional
- Swift Optional 可选型的解包简单使用
- Optional 可选项
- Guava-Optional可空类型
- Swift之可选型
- swift可选型
- swift 可选型的使用
- Swift 可选型解包
- NullPointException 利器 Kotlin 可选型
- Swift:optional 可选项的简易说明
- optional
- optional
- Optional
- Optional
- Optional
- swift 可选型的实际使用
- 六、Swift可选型与拆解包
- bootstrap-模态框
- 抗战时期为何汉奸多?
- oracle pipelined 自定义函数 function 返回table格式
- CSS实现div的高度填满剩余空间
- Linux中只列出目录
- 可选型(optional)
- 见闻上
- Unity 实用[xxx]用法
- Android获取有线网ip地址
- man的使用技巧
- APP中注册时常用的发送验证码的Button,带倒计时重发功能
- java导出Excel表格
- 网页设计大赛第九天
- 【codevs1028】花店橱窗布置 费用流(dinic)