最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Day-25 Swift 語法(21) – 鏈的多層連接

XAMPP下载 admin 770浏览 0评论
 鏈的多層連接
你可以透過連接多個可選鏈來在模型中深入的訪問屬性、方法以和下標。總而言之,多層可選鏈不會給返回的值添加多層的可選性。也就是說:

如果您訪問的類型不是可選的,則由於可選的鏈接,它將變為可選的。
如果您訪問的類型已經是可選的,則由於鏈接的原因,它將不會變得更加可選。
因此:

如果你嘗試透過可選鏈取回一個 Int 值,就一定會返回 Int?,不論經過了多少層的可選鏈。
相同的,如果你嘗試透過可選鏈訪問 Int?值,Int? 一定就是返回的類型,無論通過了多少層的可選鏈。
我們試著訪問昨天該範例的 Customer 中的 name 屬性,這裡一共使用了兩層可選鏈,以鏈接 store 和 customer 屬性,它們都是可選類型:

if let customerName = trade.store?.customer?.name {
print(“客戶名稱為\(customerName)”)
} else {
print(“讀取不到客戶名稱。”)
}
結果如下:

QQ截图20180919081958

 因為 trade.store.customer 的值為 nil ,所以 trade.store?.customer?.name 的調用失敗。上面的栗子中,你想要取回的 name 屬性。它的類型為 String?。 trade.store?.customer?.name 的返回值自然也是 String?,即使對屬性的可選項來說已經通過了兩層可選鏈。

如果你設置一個 Customer 實例作為 trade.store?.customer?.name 的值,並且設置 Customer 的 name 屬性值,你就可以通過多層可選鏈訪問 name 屬性的值了:

let tradeCustomer = Customer()
tradeCustomer.name

= “Jeremy”
tradeCustomer.phone = “0922334556”
trade.store?.customer = tradeCustomer
之後就能成功訪問客戶的資訊了:

QQ截图20180919082006
 trade.store 的 customer 屬性賦值能夠成功,是因為 trade.store 的值目前包含了一個可用的 store 實例。

用可選返回值鏈接方法
上面的例子瞭解如何透過可選鏈的連接來獲取可選類型的屬性值,你還可以使用可選鏈來調用返回可選類型值的方法,並且如果需要的話可以繼續對方法的返回值進行鏈接。

我們下面使用可選鏈來調用 Customer 的 checkData() 方法。這個方法返回 String? 類型值。正如上面所說,通過可選鏈調用的方法的最終返回的類型還是 String?:

if let checkData = trade.store?.customer?.checkData() {
print(“用戶資訊:\(checkData)”)
}
結果如下:

QQ截图20180919082114
 如此以來原先無法訪問的屬性和方法都能訪問了,可選鏈都連接在一起了:
QQ截图20180919082121

转载请注明:XAMPP中文组官网 » Day-25 Swift 語法(21) – 鏈的多層連接

您必须 登录 才能发表评论!