如果我们传入一个绑定变量(例如$ 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?
答案 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
}
}
}