我在一个SwiftUI应用程序中有这样的代码:
@Published var myFlag = false {
willSet {
... useful code ...
objectWillChange.send()
}
}它或多或少是有效的,但为了准确地得到我需要的东西,我想要这样的东西:
@Published var myFlag = false {
didSet {
... useful code ...
objectDidChange.send()
}
}原因很简单,我希望在myFlag更新后通知我,而不是在更新之前。然而,它似乎不是这样工作的。有没有别的方法可以得到我想要的东西?
此外,我还使用了以下代码:
.onReceive(self.appState.$myFlag) {...}ContentView.swift内幕
发布于 2020-08-16 21:22:51
当该属性为willSet https://developer.apple.com/documentation/combine/published时,@Published会自动发布
如果您更喜欢在didSet过程中发布,请删除@Published并手动发布。
import SwiftUI
class ManualOObject: ObservableObject {
var someValue: Int = 0{
willSet{
print("willSet - \(someValue)")
}
didSet{
print("didSet - \(someValue)")
objectWillChange.send()
}
}
init() {
for n in 0...5 {
DispatchQueue.main.asyncAfter(deadline: .now() + Double(n)) {
print("n = \(n.description)")
self.someValue = n
}
}
}
}
struct ManualOOView: View {
@ObservedObject var manualOObject = ManualOObject()
var body: some View {
Text(manualOObject.someValue.description).onReceive(manualOObject.objectWillChange, perform: { _ in
print("UI received = \(manualOObject.someValue)")
})
}
}https://stackoverflow.com/questions/63435954
复制相似问题