swift賦值語句的返回值

在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

相關文章
相關標籤/搜索