![](/img/trans.png)
[英]SwiftUI Is it ok to put an ObservableObject inside another ObservableObject?
[英]SwiftUI map @Published var from one ObservableObject to another
我想要两个单独的ObjservableObject
共享一个 @Published var。 理想情况下,如下所示。 由于Cannot assign to property: '$bar' is immutable
而无法编译Cannot assign to property: '$bar' is immutable
。 如果对其中一个进行更改,我希望 foo 和 bar 保持同步。
class FooState: ObservableObject {
@Published var foo: Bool = false
}
class BarState: ObservableObject {
@Published var bar: Bool
init(fooState: FooState) {
self.$bar = fooState.$foo // compile error
}
}
let fooState = FooState()
let barState = BarState(fooState: fooState)
print(fooState.foo) // false
print(barState.bar) // false
fooState.foo = true
print(fooState.foo) // true
print(barState.bar) // true
目前不支持(我认为)。 我知道解决它的唯一方法是自己订阅嵌套的可观察对象并传播objectWillChange
事件:
class FooState: ObservableObject {
@Published var foo: Bool = false
}
class BarState: ObservableObject {
var fooState: FooState
var bar: Bool {
return self.fooState.foo
}
private var cancellables = Set<AnyCancellable>()
init(fooState: FooState) {
self.fooState = fooState
fooState.objectWillChange
.sink { [weak self] in
self?.objectWillChange.send()
}
.store(in: &cancellables)
}
}
let fooState = FooState()
let barState = BarState(fooState: fooState)
print(fooState.foo) // false
print(barState.bar) // false
fooState.foo = true
print(fooState.foo) // true
print(barState.bar) // true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.