swift赋值语句的返回值

在C语言中赋值语句的返回值就是值本身..比如可以用int a = b = 2;将a和b同时赋值为2.
swift的赋值语句也会有返回值, 它的返回值一般是一个Void即()
 比如下面的var c: Void, 这里变量c的类型就是void 其中: Void可以省略(因为可以自动推导出来)

var b: Int
var c: Void = (b = 1) // ()
c.dynamicType // ().Type
print(c) //"()\n"

但是, 当=左边有optional unwrapping (形如a?.b ) 的时候, 赋值语句返回的是一个Void? 即  ()?
这是因为optional unwrapping可能unwrap失败, 此时赋值不会发生.
所以赋值语句会在赋值成功的时候返回Void, 在赋值失败的时候返回nil 代码如下:

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.

转载于:https://my.oschina.net/uniquejava/blog/682067

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值