about 6 years ago
Optional chaining ?
以下述例子說明,當建立了 myClass 的 instance 後要如何取得 myClass2 中的 p。
class MyClass {
var c2: MyClass2?
}
class MyClass2 {
var p = 1
}
let c = MyClass()
依照之前學的經驗,需要先對 optionals unwrapping 取出真正的值,才能繼續操作。
c.c2!.p
但上述的程式碼將會造成 error,因為 c2 是 nil,因此需要改成以下的方法,才能安全操作,
以下的方法會回傳 nil。
c.c2?.p
各種 optional chaining
class MyClass {
var c2: MyClass2?
}
class MyClass2 {
var array = [Int]()
var number: Int {
return array.count
}
func test() {
print("123")
}
var c3: MyClass3?
}
class MyClass3 {
var p: String?
}
對 property 讀取或是給予值時,都會是 nil 或是失敗。
let c = MyClass()
c.c2?.number
c.c2?.c3 = MyClass3()
呼叫 method 時,會將所有回傳 type 改為 Optional,因此若沒有回傳值,
會把 Void 改為 Void?,皆會取得 nil。
let c = MyClass()
c.c2?.test()
也可以進行多層的 optionals chaining,邏輯與上述相同。
let c = MyClass()
c.c2?.c3?.p