1

我的应用程序有两个ObservableObject

@main
struct SomeApp: App {
    @StateObject private var foo = Foo()
    @StateObject private var bar = Bar()

    var body: some Scene {
        WindowGroup {
            AppView()
                .environmentObject(foo)
                .environmentObject(bar)
        }
    }
}
class Foo: ObservableObject {
    @Published var operationResult: Bool?

    private let operationQueue = OperationQueue()

    func start() {
        operationQueue.addOperation(SomeOperation())
        // SomeOperation will set operationResult
    }
}
class Bar: ObservableObject {
    @Published var resultsAvailable = false

    func updateResults(operationResult: Bool) {
        if operationResult && someOtherCondition {
            resultsAvailable = true
        }
    }
}

在某些时候,Foo正在后台线程上做一些工作。完成后,Bar需要更新状态,可能通过调用updateResults(). 在传统的 UIKit 应用程序中,我可能会通过设置回调处理程序或发布NSNotification.

不是operationResult通过通知或处理程序传递,有没有办法Bar订阅对Foo属性的更改operationResult?在我到目前为止发现的示例中,似乎订阅可能仅在View结构内部可用,但我无法确认或否认这一点。

4

0 回答 0