winddpan / ObservationBP

Proof of concept for back-porting Observation framework to earlier iOS versions
18 stars 5 forks source link

Known issue #2

Open winddpan opened 10 months ago

winddpan commented 10 months ago

Fixed! https://github.com/winddpan/ObservationBP/commit/a1a8fb1bdf6b7a08b4a4463c8869d2b2f3e30e46

onAppear mutating doesn't work correctly

Text(person.name)
    .onAppear {
        person.name = "onAppear changed!"
    }

limited by withObservationTracking's behavior, need takes some thinking.

withObservationTracking {
    let _ = person.name
    person.name = "onAppear changed!"
} onChange: {
    print("changed")
    // not called!
}
beforeold commented 10 months ago

我刚好遇到了一个类似的问题

这里不生效,是因为 onAppear 的 closure 是 escaping 的,将会被异步调用,不会被监听到。

我的问题是类似的,用到了 ForEach 这个类型,在 ForEach 的 closure 里面的 subview 访问 model 的属性 propertyA,subview 同样无法得到 propertyA 变更的刷新