【发布时间】:2021-12-06 14:08:05
【问题描述】:
我有以下代码:
class Stuff {
var str: String?
var num = 0
}
class MyStuff:ObservableObject {
@Published var stuff:Stuff?
@Published var numer: Int?
}
class DoSomething {
let observedObject = MyStuff()
var cancellableBag = Set<AnyCancellable>()
init() {
observedObject.objectWillChange.sink { value in
print(value)
print("Object has changed")
}.store(in: &cancellableBag)
observedObject.$stuff.sink { value in
print(value?.str ?? "")
}.store(in: &cancellableBag )
}
}
但是当我执行时:
let doSomething = DoSomething()
doSomething.observedObject.stuff?.str = "Doing something"
doSomething.observedObject.stuff?.num = 2
,通知永远不会触发:
你们中的任何人都知道为什么通知永远不会触发吗?或者我怎样才能做到这一点?
【问题讨论】:
-
将您的
Stuff从class更改为struct。 -
@OOPer 为什么这很重要?是不是因为类实例突变没有设置引用?
-
@matt 在
MyStuff属性中的MyStuff中发布的值是一个指向对象的指针。@ObservableObject只会在该指针被替换时触发通知。不观察该指针后面的对象的属性,只观察指针值本身。
标签: swift swiftui combine observableobject