观察ObservableObject内部多个已发布变量的变化



我有一个包含多个发布变量来处理我的应用程序状态的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!
}
}

最新更新