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
← iOS Swift : Automatic Reference Counting iOS Swift : Error Handling →