通過可選鏈式調(diào)用訪問屬性
下面代碼中的賦值過程是可選鏈式調(diào)用的一部分空繁,這意味著可選鏈式調(diào)用失敗時,等號右側(cè)的代碼不會被執(zhí)行.
john.residence?.address = createAddress()
注意:
以后如果遇到等式右邊的方法一直未執(zhí)行時, 可以檢查等式左側(cè)變量是否有效
通過可選鏈式調(diào)用調(diào)用方法
如果通過可選鏈式調(diào)用來調(diào)用無返回值的方法掉蔬,該方法的返回類型會是 Void? 衡楞,而不是 Void 苫幢,因為通過可選鏈式調(diào)用得到的返回值都是可選的。
這樣我們就可以使用 if 語句來判斷能否成功調(diào)用方法麻蹋,即使方法本身沒有定義返回值。通過判斷返回值是否為 nil 可以判斷調(diào)用是否成功:
if objectA.objectB?.noReturnMethod() != nil {
print("It was possible to call method")
} else {
print("It was not possible to call method.")
}
// 打印 “It was not possible to call method.”
通過可選鏈式調(diào)用訪問下標
通過可選鏈式調(diào)用焊切,我們可以在一個可選值上訪問下標扮授,并且判斷下標調(diào)用是否成功;
通過可選鏈式調(diào)用訪問可選值的下標時,應(yīng)該將問號放在下標方括號的前面而不是后面
john.residence?[0] = Room(name: "Bathroom")
這次賦值可能會失敗专肪,因為 residence 可能是 nil
連接多層可選鏈式調(diào)用
- 通過可選鏈式調(diào)用訪問一個 Int 值刹勃,將會返回 Int? ,無論使用了多少層可選鏈式調(diào)用;
- 類似的牵祟,通過可選鏈式調(diào)用訪問 Int? 值深夯,依舊會返回 Int? 值,并不會返回 Int??
if let beginsWithThe = john.residence?.address?.buildingIdentifier()?.hasPrefix("The") {
if beginsWithThe {
print("John's building identifier begins with \"The\".")
} else {
print("John's building identifier does not begin with \"The\".")
}
} else {
print("chaining on methods with optional return values error!")
}
// 打印 “John's building identifier begins with "The".”
上面代碼中鏈式調(diào)用返回一個 Bool? 類型, 使用 if let (可選綁定) 將有效值賦值給常量 beginsWithThe, 然后再判斷 Bool 是否為 true, 所以需要兩層 if 嵌套.
資料:
The Swift Programming Language 中文版