你可以透過連接多個可選鏈來在模型中深入的訪問屬性、方法以和下標。總而言之,多層可選鏈不會給返回的值添加多層的可選性。也就是說:
如果您訪問的類型不是可選的,則由於可選的鏈接,它將變為可選的。
如果您訪問的類型已經是可選的,則由於鏈接的原因,它將不會變得更加可選。
因此:
如果你嘗試透過可選鏈取回一個 Int 值,就一定會返回 Int?,不論經過了多少層的可選鏈。
相同的,如果你嘗試透過可選鏈訪問 Int?值,Int? 一定就是返回的類型,無論通過了多少層的可選鏈。
我們試著訪問昨天該範例的 Customer 中的 name 屬性,這裡一共使用了兩層可選鏈,以鏈接 store 和 customer 屬性,它們都是可選類型:
if let customerName = trade.store?.customer?.name {
print(“客戶名稱為\(customerName)”)
} else {
print(“讀取不到客戶名稱。”)
}
結果如下:



如果你設置一個 Customer 實例作為 trade.store?.customer?.name 的值,並且設置 Customer 的 name 屬性值,你就可以通過多層可選鏈訪問 name 屬性的值了:
let tradeCustomer = Customer()
tradeCustomer.name
= “Jeremy”
tradeCustomer.phone = “0922334556”
trade.store?.customer = tradeCustomer
之後就能成功訪問客戶的資訊了:
用可選返回值鏈接方法
上面的例子瞭解如何透過可選鏈的連接來獲取可選類型的屬性值,你還可以使用可選鏈來調用返回可選類型值的方法,並且如果需要的話可以繼續對方法的返回值進行鏈接。
我們下面使用可選鏈來調用 Customer 的 checkData() 方法。這個方法返回 String? 類型值。正如上面所說,通過可選鏈調用的方法的最終返回的類型還是 String?:
if let checkData = trade.store?.customer?.checkData() {
print(“用戶資訊:\(checkData)”)
}
結果如下: