1

当初始化程序注入不起作用或为示例创建 mvvm 模块时,我发现自己使用了很多隐式展开的选项:

class TodoView: UIViewController {
    
    var viewModel: TodoViewModelProtocol!

}

不仅它看起来不太好,而且如果我需要在显式解包的可选变量上使用 switch 语句,总是强制解包也是一种痛苦。

有什么方法可以摆脱隐式展开的可选选项,例如@properyWrapper在 swift 5 中使用?

4

1 回答 1

1

您可以使用属性包装器模拟隐式展开的选项,如下所示:

@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
于 2021-05-07T13:51:50.717 回答