定义
Optional是Objective-C没有的数据类型,是苹果引入到Swift语言中的全新类型,它的特点就和它的名字一样:可以有值,也可以没有值,当它没有值时,就是nil。此外,Swift的nil也和Objective-C有些不一样,在Objective-C中,只有对象才能为nil,而在Swift里,当基础类型(整形、浮点、布尔等)没有值时,也是nil,而不是一个初始值,没有初始值的值,是不能使用的,这就产生了Optional类型
解读
1、可以认为可选类型就像一个生日礼物,像礼物盒外面那层精美的包装纸,拆开他们之后,也许里面什么都没有。
2、可选类型在每次访问的时候都会提前并检测它的值是否存在,但有时候根据程序结构就可以推断出可选类型在首次赋值之后必然存在值,这个时候,就不需要每次都检测值是否存在,如果确定一个可选类型的值一定存在,那么我们使用 "!" 进行解包获取它的值
3、把隐式解包可选类型当成自动解包的可选类型。即不是每次使用的时候在变量/常量后面加!,而是直接在定义的时候加!,这些可选变量定义为隐式解包的可选量(implicitly unwrapped optional)。
隐式解包的可选量的声明格式为:在希望标为可选的类型名称后面,用感叹号(!)代替问号(?)
隐式解包的可选类型主要用在一个变量/常量在定义瞬间完成之后值一定会存在的情况。主要用在类的初始化过程中。
个人总结
可选类型定义加感叹号(!),然后就直接用。
代码
var companyName:String?
print(companyName)
companyName = "然后故作谦虚的说金钱不是一切"
print(companyName!)
//隐式解包
var schoolName:String! = "swift在我脚下"
print(schoolName)
注: 1、nil不能用于非可选类型的变量和常量。也就是说nil只能用在可选类型的变量和常量。
2、如果你声明了可选变量或常量,但是没有赋值,它们会被自动赋值为nil。
3、swift里的nil和OC里的nil并不一样,OC里的nil是一个指向不存在对象的指针;但是在swift中,nil不是指针,它是一个确定的值,用来表示值缺失。任意类型的可选状态的值缺失都可以赋值nil,并不只是对象类型可以赋值。
4、Swift中,’!’:强行解包,从可选值中强行获取对应的非空值,如果真的遇见nil,程序直接崩溃.