您如何正确地拆开普通选项和隐式选项?
这个主题似乎有些混乱,我只想对所有方法以及它们如何有用提供参考。
当前有两种创建可选项的方法:
var optionalString: String? var implicitOptionalString: String!
有两种解开包装的方式吗?另外,使用!和?展开过程之间有什么区别?
!
?
有很多相似之处,只有少数区别。
宣言: var opt: Type?
var opt: Type?
不安全地展开: let x = opt!.property // error if opt is nil
let x = opt!.property // error if opt is nil
安全地测试存在: if opt != nil { ... someFunc(opt!) ... } // no error
if opt != nil { ... someFunc(opt!) ... } // no error
通过绑定安全地展开: if let x = opt { ... someFunc(x) ... } // no error
if let x = opt { ... someFunc(x) ... } // no error
安全链接: var x = opt?.property // x is also Optional, by extension
var x = opt?.property // x is also Optional, by extension
安全合并零值: var x = opt ?? nonOpt
var x = opt ?? nonOpt
宣言: var opt: Type!
var opt: Type!
不安全地展开(隐式): let x = opt.property // error if opt is nil
let x = opt.property // error if opt is nil
通过分配不安全地展开: let nonOpt: Type = opt // 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
func someFunc(nonOpt: Type) ... someFunc(opt) // error if opt is nil
安全地测试存在: if opt != nil { ... someFunc(opt) ... } // no error
if opt != nil { ... someFunc(opt) ... } // no error