SwiftUI 可选环境对象

2024-01-21

我在用着@EnvironmentObject像这样:

struct MyView: View {
  @EnvironmentObject var object: MyObject

  ...
}

但我的代码不需要有值object.

仅将其设为可选是行不通的(甚至无法编译 -Property type 'MyObject?' does not match that of the 'wrappedValue' property of its wrapper type 'EnvironmentObject')

您也不能传入默认对象(这也可以解决我的问题) - 要么作为属性的初始值,要么作为参数@EnvironmentObject。 e.i.这些不起作用:

@EnvironmentObject var object: MyObject = MyObject()

@EnvironmentObject(MyObject()) var object: MyObject

我尝试过包裹@EnvironmentObject在我自己的属性包装中,但这根本不起作用。

我也尝试过包装对对象属性的访问,但它不会抛出可以捕获的异常,而是抛出fatalError.

我是否遗漏了什么,或者我只是在尝试不可能的事情?


这不是一个非常优雅的方法,如果 EnvironmentObject 中的任何内容发生变化(以及其他警告),它很容易就会崩溃,但是如果您在 SwiftUI 1 / Xcode 11.3.1 中打印 EnvironmentObject,您会得到:

EnvironmentObject<X>(_store: nil, _seed: 1)

那么怎么样:

extension EnvironmentObject {
    var hasValue: Bool {
        !String(describing: self).contains("_store: nil")
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI 可选环境对象 的相关文章

随机推荐