Xcode不会让我在可选对象上使用`@ObservedObject`

我有一个ObservableObject名为的类MyObjectModel被传递给这样的结构:

var body: some View {
  MyView(myObjectModel)

但是在另一个上下文中,我没有要传递的模型,所以我想MyView简单地调用

var body: some View {
  MyView()

所以我想我可以MyView像这样初始化

struct MyView: View {

  @ObservedObject private var model: MyObjectModel?

  init(model: MyObjectModel? = nil) {
    self.model = model
  }

但是 Xcode 不会让我使用@ObservedObject可选项。

我怎么做?

回答

ObservedObject包装不具有可选的构造函数,现在(我们不能延长Optional与一致性ObservableObject,因为它不是一个类)。

一种可能的方法是有一些特定的标记,表明没有模型,因为它为零。

这是一个演示:

class MyObjectModel: ObservableObject {
    static let None = MyObjectModel()     // Like NSNull.null
}

struct MyView: View {

    @ObservedObject private var model: MyObjectModel

    init(model: MyObjectModel? = nil) {
        self.model = model ?? MyObjectModel.None
    }

    var body: some View {
        if self.model === MyObjectModel.None {
            Text("Same as it would be nil!")      // << here !!
        } else {
            Text("For real model")
        }
    }
}


以上是Xcode不会让我在可选对象上使用`@ObservedObject`的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>