代码之家  ›  专栏  ›  技术社区  ›  Tometoyou

已发布对象未发布,我是否做错了?

  •  0
  • Tometoyou  · 技术社区  · 4 年前

    我的代码如下所示:

    final class MyModelController: ObservableObject {
        @Published var model = MyModel()
    }
    
    enum ButtonSelection: Int {
        case left, right
    }
    
    final class MyModel {
        var buttonSelection: ButtonSelection?
    }
    

    MyModelController 作为 @EnvironmentObject

    当我设定 myModelController.model.buttonSelection ,我想它会更新的 myModelController.model @Published . 然而,事实并非如此。我怎样才能解决这个问题?

    1 回复  |  直到 4 年前
        1
  •  0
  •   George    4 年前

    @Published 仅检测值类型的更改。 MyModel 是一个 class ,这是一种引用类型。

    如果可能,请更改 我的模型 struct 我会解决这个问题的。但是,如果这是不可能的,请参阅此答案的其余部分。


    你可以用联合收割机修理它。下面的代码将更新 MyModelController 什么时候 model (现在是 ObservableObject

    final class MyModelController: ObservableObject {
        @Published var model = MyModel()
    
        init() {
            _ = model.objectWillChange.sink { [weak self] in
                self?.objectWillChange.send()
            }
        }
    }
    
    /* ... */
    
    final class MyModel: ObservableObject {
        @Published var buttonSelection: ButtonSelection?
    }