gpt4 book ai didi

swift - 在 SwiftUI 中将可观察对象的通知更改为嵌套对象

转载 作者:行者123 更新时间:2023-12-05 03:50:56 27 4
gpt4 key购买 nike

我有以下场景。

我有一个 AppState,它由一个 Foo 类型的对象组成。 Foo 有一个计数器变量,我想在计数器值更新时调用 objectWillChange,这样我就可以更新 UI。

目前没有任何事情发生。增量函数被调用,但 UI 永远不会更新。




import Foundation
import Combine

class Foo: ObservableObject {
@Published var counter: Int = 999

func increment() {
counter += 1 // how to get notified when counter value changes
}
}

class AppState: ObservableObject {

@Published var foo: Foo = Foo()
}

// usage in Scene Delegate as Environment Object
let appState = AppState()

// Use a UIHostingController as window root view controller.
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: accountSummaryScreen.environmentObject(appState))

更新

class Foo: ObservableObject {
@Published var counter: Int = 999 {
didSet {
objectWillChange.send()
}
}

func increment() {
counter += 1 // how to get notified when counter value changes
}
}

最佳答案

未检测到更改,因为作为引用类型的 Foo 实际上并没有更改 - 它是相同的引用,所以 @Published 在这里没有帮助.

AppState 需要手动订阅更改并调用它自己的 objectWillChange.send:

class AppState: ObservableObject {

var foo: Foo = Foo() {
didSet {
cancellables = []
foo.$counter
.map { _ in } // ignore actual values
.sink(receiveValue: self.objectWillChange.send)
.store(in: &cancellables)
}
}

private var cancellables: Set<AnyCancellable> = []
}

关于swift - 在 SwiftUI 中将可观察对象的通知更改为嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63251715/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com