我的代码是这样的:
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?
}