在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