使用可選鏈式呼叫代替強制展開、為可選鏈式呼叫定義模型類、通過可選鏈式呼叫訪問屬性、通過可選鏈式呼叫呼叫方法、通過可選鏈式呼叫訪問下標、連線多層可選鏈式呼叫、在方法的可選返回值上進行可選鏈式呼叫。
可選鏈式呼叫是一種可以在當前值可能為nil的可選值上請求和呼叫屬性、方法及下標的方法。如果可選值有值,那麼呼叫就會成功;如果可選值是nil,那麼呼叫將返回nil。多個呼叫可以連線在一起形成乙個呼叫鏈,如果其中任何乙個節點為nil,整個呼叫鏈都會失敗,即返回nil。
使用可選鏈式呼叫代替強制展開:
通過在想呼叫的屬性、方法、或下標的可選值後面放乙個問號(?),可以定義乙個可選鏈。這與可選值後面放乙個嘆號(!)來強制展開它的值很相似。它們的主要區別在於當可選值為空時可選鏈式呼叫只會呼叫失敗,然而強制展開將會觸發執行時錯誤。
為了反映可選鏈式呼叫可以在空值(nil)上呼叫的事實,不論這個呼叫的屬性、方法及下標返回的值是不是可選值,它的返回結果都是乙個可選值。可以利用這個返回值來判斷可選鏈式呼叫是否呼叫成功,如果呼叫有返回值則說明呼叫成功,返回nil則說明呼叫失敗。
可選鏈式呼叫的返回結果與原本的返回結果具有相同的型別,但是被包裝成了乙個可選值。例如,使用可選鏈式呼叫訪問屬性,當可選鏈式呼叫成功時,如果屬性原本的返回結果是int型別,則會變為int?型別。
class a
class b
var t=a()
t.a=b()
print(t.a!.b) //列印9
print(t.a?.b) //列印optional(9)
可選鏈式呼叫的問號不能直接用於一級型別,它需要間接地作用在二級或以上的型別,如類的屬性、方法、下標等。且這些屬性、方法和下標都是可選型別。如 a?.b
如下情況出錯(var a:int?; print(a?) //不能直接一級訪問乙個可選屬性)
為可選鏈式呼叫定義模型類:
通過使用可選鏈式呼叫可以呼叫多層屬性、方法和下標。這樣可以在複雜的模型中向下訪問各種子屬性,並且判斷能否訪問子屬性的屬性、方法或下標。
a.b?.c
a.b?.d()
a.b?[n]
//這三個訪問成功的前提是a.b不為空nil
//a是可去掉的,二級呼叫:b->c,d,
連線多層可選鏈式呼叫:
可以通過連線多個可選鏈式呼叫在更深的模型層級中訪問屬性、方法及下標。多層可選鏈式呼叫不會增加返回值的可選層級。
1)如果訪問的值不是可選的,可選鏈式呼叫將會返回可選值。
2)如果訪問的值就是可選的,可選鏈式呼叫不會讓可選返回值變得「更可選」。int?仍為int?
Swift學習之可選鏈式呼叫
一種在當前值可能為nil的可選值上呼叫屬性 方法 下標的方法,如果可選值有值,則呼叫成功,否則就返回nil。多個呼叫可以連線在一起形成一條鏈,如果整條鏈的某個節點為nil,則呼叫不成功,返回nil。class person class residence subscript index int ro...
Swift學習筆記系列 (16)可選鏈
tags swift 學習筆記 可選鏈提供的是一種方便訪問可選型別值的途徑。可選鏈可以替代強制拆包的寫法,而且寫法可以更簡潔。可選鏈可以多級,直達你想要訪問的內容。可選鏈可以方法屬性 下標和方法。可選鏈返回的必定是乙個可選型別,返回nil則證明這條可選鏈中的某個環節是斷掉 其中有nil 的。用法 簡...
Swift程式語言學習1 6 可選值
可選值 使用可選 optionals 來處理值可能缺失的情況。可選表示 有值,等於 x 或者沒有值 注意 c 和 objective c 中並沒有可選這個概念。最接近的是 objective c 中的乙個特性,乙個方法要不返回乙個物件要不返回nil,nil表示 缺少乙個合法的物件 然而,這僅僅對物件...