微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 swift 中使用 @propertyWrapper 替代隐式解包可选

如何解决在 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。