swift 中的双问号 ?? Double Question Mark
2015-12-09 18:09
501 查看
对于Swift项目中对Optional Value的安全有效处理在我的上一篇文章中已经详细谈论:地址 /article/9642765.html
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
例子:赋default值
例子:若为nil 赋值为String数组
------如果我们command进入双问号的定义会看见什么:
转载请注明出处:http://zyden.vicp.cc/swift-doublequestionmark/ 谢谢
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/ 谢谢
相关文章推荐
- swift学习心得 - 基本运算符
- Swift第三天学习
- Swift - 加载XIB 文件
- swift 自定义弹框
- swift中let 和var的区别
- swift添加navigationcontroller
- 关于swift的一些学习资源
- swift @noescape有啥卵用
- Swift学习(一)
- Swift 限制UITextField字数的方法
- swift创建代理
- swift 动画
- Swift- lazy 懒加载
- Swift method的internalname和externalname
- Swift第二天学习
- Swift中的NSNumber
- Swift中的Range<Int>类型
- 冷市攻略:Listo 教你 25 今天的社会 Swift 语言 - 02 Swift Tour
- Swift 中的指针使用
- Using Legacy C APIs with Swift