swift可选型之一
可选型Optional
- 什么是可选型
在swift里面出现了一个全新的类型-可选型。那什么是可选项呢?个人的理解就是说一个变量或者常量"可有可无",也就是可以为具体的某个值,也可以为空也就是nil。
- 如何定义一个可选型
var say: String? = "Hi swift"
上边定义一个字符串的可选型,在类型后边加上一个问号就表示字符串的可选型,同理其它类型的也是在类型后边加问号就变为相应的可选型了。
- 可选型的解包
- 当我们对可选型进行操作的时候,比如两个字符串相加。如何我们不对可选型进行解包,直接用
"2016.7.28 " + say
那么系统就会报错打印信息
Playground execution failed: /var/folders/2m/4f8gwn750rn0vvz2n6rgg8tc0000gn/T/./lldb/2216/playground177.swift:7:16: error: value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'? "2016.7.28 " + say ^ !
提示你是否用"!"和"?"来解包。当我们在say后边加上"!"(加问号的解包后边说),错误提示就不存在了。就变成这样了
"2016.7.28 " + say!
但是用"!"的前提是你确认say的字符串为非nil,如果为nil那么程序还是会崩,这种解包方式叫强制解包,存在一定的风险,开发中尽量少用。我们用到最多的还是下面这种解包方式
if let say = say { "2016.7.28 " + say }
这句代码我解释一下,使用if let 语句的意思就是我们尝试对后边那个say字符串进行解包,当say为非nil的时候我们把解包的值赋值为第一个say,以便我们在if语句内使用。只有当解包的数据为非nil时,程序才会进入if内部语句执行。这边为啥可以有两个相同的变量名,这里是swift所允许的,第一个say为if的局部变量,当程序执行完if语句后,第一个say就释放掉了。其实跟OC和C语言一样,一个可以看做是局部变量,一个可以看做是全局变量。当解包失败的时候我们什么都不做,你也可以在后边添加一个else语句进行解包失败的处理。
- 还有一种方式使用"??"对可选型进行解包
var say: String? = "Hi swift" var saySomeThing = say ?? "Noting" print(saySomeThing)
打印效果
Hi swiftvar saySomeThing = say ?? "Noting"这句代码中用到的"??"的作用是我们尝试对say进行解包,如果say能解包,也就是非nil,我们就把解包后的值赋值给
saySomeThing,如何解包后say为nil,那么我们就两个问号后边的值赋值给saySomeThing。(此时say的值不变还是nil,而不是问号后边的值)
- 在以后的开发中我们会经常用到可选型,其实系统提供的很多函数都有可选型,可以说可选型在swift中随处可见,这边只是介绍简单的可选型定义和解包,后续还会更新可选型其他的用处。