在SwiftUI中重置绑定变量

时间:2020-06-20 10:01:15

标签: swift uikit swiftui

如果我们传入一个绑定变量(例如$ saveDialog为true)来警告或工作表,此后该变量将重置为false。

.alert(isPresented: $saveDialog) {}

但是,如果我们想做同样的事情,该怎么办:说,当我们点击按钮时,通过将$ clear设置为true来清除屏幕:

 Button("Clear") { self.clear = true }

然后

 DrawView(clear:$clear)

在DrawView中

struct DrawView: UIViewRepresentable {
    @Binding var clear:Bool

    func updateUIView(_ canvas: PKCanvasView, context: Context) {
        if clear {
            canvas.drawing = PKDrawing()
            self.clear = false // Issue
        }
    }

问题是:在视图更新期间修改状态,这将导致未定义的行为。在哪里将clear变量设置为false?

1 个答案:

答案 0 :(得分:0)

这是可能的解决方法

func updateUIView(_ canvas: PKCanvasView, context: Context) {
    if clear {
        canvas.drawing = PKDrawing()

        // make on next event loop, so do not affect current update
        // which already uses `clear` state, thus avoid cycling
        DispatchQueue.main.async {
            self.clear = false
        }
    }
}