更新 @ObservedObject 时如何在视图上调用函数

时间:2021-07-12 16:45:41

标签: ios swift swiftui observable

我有一个正常工作的被观察对象。当我更新字符串时,标签也会更新。

但是,我有一个 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 中的属性发生更改时,如何调用方法?这可能吗,还是我需要创建

1 个答案:

答案 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>