【关于?】
可选类型(Optional),没有初始值的属性
例:var name: String? nil
var name: String? = “Text” String
Optional其实是个enum,里面有None和Some两种类型。其实所谓的nil就是Optional.None , 非nil就是Optional.Some,然后会通过Some(T)包装(wrap)原始值。这也是为什么在使用Optional的时候要拆包(从enum里取出来原始值)
【关于!】
操作一个可选类型的变量,进行强解包的时候用到。如果有值就会得到变量的值,如果为nil那么程序就会crash
【as的定义】:有保证的转换
1、向上转换,转成自己的父类型
2、数据类型转换
3、switch语句中进行模式匹配
【as!的定义】 强制类型转换,向下转型时使用。
class Animal {}
class Cat: Animal {}
let animal: Animal = Cat()
let cat = animal as! Cat
【as?的定义】 同as! 转换失败返回nil,不会报错
【??的定义】 取两个中不为nil的