- Optional的本質(zhì)是枚舉類型。
public enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none
case some(Wrapped)
...
}
String?
是optional皆尔,其值可以是nil,可以根據(jù)需要unwrap币励;
String!
也是optional慷蠕,其值可以是nil,在調(diào)用時會自動unwrap食呻;
String
不是optional流炕,調(diào)用時發(fā)現(xiàn)其值為nil會被報錯。在Optional Chaining中仅胞,如果有一個表達(dá)式是optional的每辟,那么整個表達(dá)式的結(jié)果就是optional的。所以以下代碼會產(chǎn)生編譯錯誤:
if aPerson.son?.firstName == "xxx" {
...
}
需要對表達(dá)式unwrap之后才能進(jìn)行處理:
if let firstName = aPerson.son?.firstName {
...
}