已发布对象不发布,我做错了吗?



我的代码是这样的:

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

我已经将MyModelController的实例作为@EnvironmentObject注入到我的SwiftUI视图中。

当我设置myModelController.model.buttonSelection时,我认为它会更新myModelController.model并发出更新,因为它被标记为@Published。然而,事实并非如此。我该如何解决这个问题?

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

如果可能的话,将MyModel更改为struct将修复此问题。然而,如果这是不可能的,看看这个答案的其余部分。


你可以用Combine来修复它。当model(现在是ObservableObject)改变时,下面的代码将更新MyModelController

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?
}

相关内容

最新更新