在C語言中賦值語句的返回值就是值自己..好比能夠用int a = b = 2;將a和b同時賦值爲2.
swift的賦值語句也會有返回值, 它的返回值通常是一個Void即()
好比下面的var c: Void, 這裏變量c的類型就是void 其中: Void能夠省略(由於能夠自動推導出來)swift
var b: Int var c: Void = (b = 1) // () c.dynamicType // ().Type print(c) //"()\n"
可是, 當=左邊有optional unwrapping (形如a?.b ) 的時候, 賦值語句返回的是一個Void? 即 ()?
這是由於optional unwrapping可能unwrap失敗, 此時賦值不會發生.
因此賦值語句會在賦值成功的時候返回Void, 在賦值失敗的時候返回nil 代碼以下:app
class Person { var name: String? } var p: Person?// = Person(); //nil //賦值語句返回的是一個Void? 即 ()? //這裏result的值當p爲nil的時候爲nil, 當p有值(賦值成功)的時候返回Optional<()> var result: ()? = (p?.name = "cyper") // nil result.dynamicType // Optional<()>.Type if let result = result { print(result, p!.name!) } else { print("name not assigned") //"name not assigned\n" }
注:
1. Void實際上是()的typealias, 它們是徹底等價的. 而()是一個空的tuple, 沒有返回值的函數返回的就是一個空的tuple.
2. 此關係式成立: Void? === ()? === Optional<Void> === Optional<()>函數
參考 iOS 9 programming Fundamentals with Swift chapter 3.code