可选类型(Optional)
Optional
-
Optional是Swift中的可选类型
-
Optional 包括两种取值 nil 和 真实值
-
什么是Optional ?
-
Optional是Swift中引入的可选类型.在Swift中声明一个标识符的时候,默认情况下它是non-optional的,如此,该标识符只能被赋值非空的值,当给non-optional赋值nil的时候编译器会报错。
-
对于OC的同学来说有点奇怪,之前声明变量NSString的变量初始值可以为nil的。
-
因为nil在Swift中是一种特殊类型,所以不能赋值给指定数据类型的标识符
为什么引入可选类型
-
Swift是一个安全的编程语言,可选类型就是安全语言的一大体现。OC中运行时才会发现的错误,Swift中的可选类型在编译阶段就能找出一些OC中运行时出现的错误。
-
Swift加强了对空值的检查
代码演练
定义可选类型
// 错误写法
// let string : String = nil
// 正确写法:
// 写法一:定义可选类型
let string : Optional<String> = nil
// 写法二:定义可选类型,语法糖(常用)
let string : String? = nil
给可选类型赋值
string = "CWB"
// 打印结果
print(string)
// 结果:Optional("CWB")\n
// 因为打印出来的是可选类型,所有会带Optional
拆包 !
-
在可选类型的标识符后面加! 就是对可选类型进行强制拆包
-
拆包就是把可选类型的真实值取出来
-
强制拆包在一定程度上是有风险的,如果可选类型取值nil会造成崩溃
// 取出可选类型的真实值(解包)
print(string!)
// 结果:CWB\n 没有了Optional
// 注意:如果可选类型为nil,强制取出其中的值(解包),会出错
string = nil
print(string!) // 报错
// 正确写法: 但是这种写法在正常开发中会造成if语句的嵌套
if string != nil {
print(string!)
}
可选绑定
-
可选绑定作用
- 让代码更简洁
- 可选绑定会先判断标识符是否为nil,如果不为nil则对标识符进行拆包
// 简单写法:为了让在if语句中可以方便使用string
if var str = string {
print(str)
}
// 可选绑定示例 创建request
// 通过该方法创建的URL,可能有值,也可能没有值
// 错误写法:如果返回值是nil时,就不能接收了
let url : NSURL = NSURL(string: "www.520it.com")
// 正确写法:使用可选类型来接收
let url : NSURL? = NSURL(string: "www.520it.com")
// 通过url来创建request对象
if let url = url {
let request = NSURLRequest(URL: url)
}
总结
可选类型在Swift基础中算是一个比较难理解的概念,但慢慢熟悉了就会发现其中的奥妙,可选绑定初学的同学可能感觉比较麻烦,没关系 ,多用用就会发现你爱上它了。
网友评论