我有一个正常工作的被观察对象。当我更新字符串时,标签也会更新。
但是,我有一个 Bool,当它在 Observable 对象内部更改时需要调用自定义函数。当 Bool 设置为 true 时,我需要将背景颜色闪烁 0.1 秒。
class Event: ObservableObject {
static let current = Event()
@Published var name = ""
@Published var pass = false
}
struct EnterDistanceView: View {
@ObservedObject var event = Event.current
//when event.pass == true, call this
func flash() {
//UI update of flash
}
}
当@ObservedObject 中的属性发生更改时,如何调用方法?这可能吗,还是我需要创建
答案 0 :(得分:1)
当发布的值发生变化时,您可以使用 onReceive
执行命令式操作:
struct EnterDistanceView: View {
@ObservedObject var event = Event.current
func flash() {
//UI update of flash
}
var body: some View {
Text("Hello world")
.onReceive(event.$pass) { value in
if value {
//do your imperitive code here
flash()
}
}
}
}
在您的 flash
方法中,我假设您希望更改表示屏幕颜色的 @State
变量的值,然后使用 DispatchQueue.main.asyncAfter
将其更改回来。< /p>