问题描述
当初始化器注入不起作用或为示例创建 mvvm 模块时,我发现自己使用了很多隐式解包的选项:
class TodoView: UIViewController {
var viewmodel: TodoviewmodelProtocol!
}
不仅看起来不太好,而且总是强制解包如果我需要在显式解包的可选变量上使用 switch 语句也很痛苦。
有什么办法可以去掉隐式解包的可选项,例如在 swift 5 中使用 @properyWrapper
吗?
解决方法
您可以使用属性包装器模拟隐式解包的选项,如下所示:
@propertyWrapper
struct MaybeUninitialized<T> {
private var storage: T?
var wrappedValue: T {
get { storage! }
set { storage = newValue}
}
}
然后您甚至可以使用可能未初始化的字段来存储可选项,而不会意外地解开可选项。像这样:
@MaybeUninitialized var x: Int?
print(x) // will crash
x = nil
print(x) // print nil