1.?
定义:用?修饰的常量或者变量,代表这是一个可选类型的常量或者变量,就是说这个量可以有值,也可以没有值。如下例子,如果num有值就是int类型,如果没有值那就是nil
例子:
let num: Int? // nil类型
let num: Int? = 2 // int类型
2.!
定义:如果要操作一个可选类型的变量,并且你需要进行强解包的时候,你就会用到!。如果有值就会得到变量的值,如果为nil那么程序就会crash
例子:
// 定义一个String的可选类型str,显示赋值,不会crash,正常。
var str: String? = "皇晓晨"
let message = "你好" + str!
print(message)
// 定义一个String的可选类型str,不进行显示赋值,会crash
var str: String?
let message = "你好" + str!
print(message)
Fatal error: Unexpectedly found nil while unwrapping an Optional value (致命错误:在展开可选值时意外发现nil)
3.as
定义:有保证的转换,从派生类转换为基类的向上类型
场景1:(从派生类转换为基类,向上转型)
class Animal {}
class Cat: Animal {}
let cat &