Сбросить переменную привязки в SwiftUI - PullRequest
0 голосов
/ 20 июня 2020

Когда мы передаем переменную привязки (например, $ 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 голосов
/ 20 июня 2020

Вот возможное решение

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
        }
    }
}
...