当初始化程序注入不起作用或为示例创建 mvvm 模块时,我发现自己使用了很多隐式展开的选项:
class TodoView: UIViewController {
var viewModel: TodoViewModelProtocol!
}
不仅它看起来不太好,而且如果我需要在显式解包的可选变量上使用 switch 语句,总是强制解包也是一种痛苦。
有什么方法可以摆脱隐式展开的可选选项,例如@properyWrapper
在 swift 5 中使用?
当初始化程序注入不起作用或为示例创建 mvvm 模块时,我发现自己使用了很多隐式展开的选项:
class TodoView: UIViewController {
var viewModel: TodoViewModelProtocol!
}
不仅它看起来不太好,而且如果我需要在显式解包的可选变量上使用 switch 语句,总是强制解包也是一种痛苦。
有什么方法可以摆脱隐式展开的可选选项,例如@properyWrapper
在 swift 5 中使用?
您可以使用属性包装器模拟隐式展开的选项,如下所示:
@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