你如何正确解开正常和隐含的期权?
这个主题似乎有些混乱,我只想提供所有方法以及它们如何有用的参考.
目前有两种创建选项的方法:
var optionalString: String?
var implicitOptionalString: String!
Run Code Online (Sandbox Code Playgroud)
打开两者的方法是什么?另外,在展开期间!和使用?期间有什么区别?
jtb*_*des 45
有许多相似之处,只有少数差异.
宣言: var opt: Type?
不安全地打开: let x = opt!.property // error if opt is nil
安全测试存在: if opt != nil { ... someFunc(opt!) ... } // no error
通过绑定安全地展开: if let x = opt { ... someFunc(x) ... } // no error
安全链接: var x = opt?.property // x is also Optional, by extension
安全地合并零值: var x = opt ?? nonOpt
宣言: var opt: Type!
不安全展开(隐含): let x = opt.property // error if opt is nil
通过作业不安全地展开:
let nonOpt: Type = opt // error if opt is nil
通过参数传递不安全地展开:
func someFunc(nonOpt: Type) ...
someFunc(opt) // error if opt is nil
安全测试存在: if opt != nil { ... someFunc(opt) ... } // no error
安全链接: var x = opt?.property // x is also Optional, by extension
安全地合并零值: var x = opt ?? nonOpt
从Beta 5开始,我们还有了新的合并运算符(??):
var a : Int?
let b : Int = a ?? 0
Run Code Online (Sandbox Code Playgroud)
如果可选项是!= nil则将其解包,否则将使用运算符右侧的值
| 归档时间: |
|
| 查看次数: |
17646 次 |
| 最近记录: |