我有一个包含多个发布变量来处理我的应用程序状态的ObservableObject
。每当其中一个发布的变量改变时,我想调用ObservableObject
中的一个函数。最好的方法是什么?
class AppModelController: ObservableObject {
@Published var a: String = "R"
@Published var b: CGFloat = 0.0
@Published var c: CGFloat = 0.9
// Call this function whenever a, b or c change
func check() -> Bool {
}
}
你能做的最简单的事情就是听objectWillChange
。问题是在对象更新之前调用。您可以使用.receive(on: RunLoop.main)
在下一个循环中获取更新,这将反映更改后的值:
import Combine
class AppModelController: ObservableObject {
@Published var a: String = "R"
@Published var b: CGFloat = 0.0
@Published var c: CGFloat = 0.9
private var cancellable : AnyCancellable?
init() {
cancellable = self.objectWillChange
.receive(on: RunLoop.main)
.sink { newValue in
let _ = self.check()
}
}
// Call this function whenever a, b or c change
func check() -> Bool {
return true
}
}
你可以使用didSet,像这样的代码:
class AppModelController: ObservableObject {
@Published var a: String = "R" { didSet(oldValue) { if (a != oldValue) { check() } } }
@Published var b: CGFloat = 0.0 { didSet(oldValue) { if (b != oldValue) { check() } } }
@Published var c: CGFloat = 0.9 { didSet(oldValue) { if (c != oldValue) { check() } } }
func check() {
// Some Work!
}
}