在swift中使用@propertyWrapper来替代隐式展开的可选项



当初始化程序注入不起作用或创建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

最新更新