swift 中的双问号 ?? Double Question Mark

对于Swift项目中对Optional Value的安全有效处理在我的上一篇文章中已经详细谈论:地址 http://blog.csdn.net/poppin_category/article/details/50056901

swift中有个双问号操作符(??),可以用来快速对nil进行条件判断,今天来补充下双问号的用法,对于不期望某个optional值为nil时func返回nil 或者 因为其值为nil而停止了后续业务的情况下,我们可以用"??"在optionalValue为nil时做赋值保险操作(“??”操作后返回值为非optional)

用法:newValue = optionalValue ?? value

若optionalValue非nil时,newValue的值为optionalValue的值,若optionalValue为nil时,newValue的值为value的值


简单明了直接上例子: self.objectForKey(key)为nil时,object的值为0

func validIntValueForKey(key: String) -> Int {
      let object = self.objectForKey(key) ?? Int(0)
      //do something
}

例子:赋default值

versionNameLabel.text = NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleVersionKey as String) as? String ?? "版本号读取失败"

例子:若为nil 赋值为String数组

let businessNameList = user.businessList?.flatMap{ $0.businessName } ?? ["无场馆"]


------如果我们command进入双问号的定义会看见什么:

@warn_unused_result
public func ??<T>(optional: T?, @autoclosure defaultValue: () throws -> T?) rethrows -> T?

@warn_unused_result
public func ??<T>(optional: T?, @autoclosure defaultValue: () throws -> T) rethrows -> T
可以看出我们在??后面输入的值都会被自动封装成一个闭包"() -> T?",当然,我们也可以传入一个闭包


转载请注明出处:http://zyden.vicp.cc/swift-doublequestionmark/ 谢谢


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值