Функция .toggle () в bool не вызывает didSet. Это ошибка? - PullRequest
1 голос
/ 16 апреля 2020

У меня есть переменная @State Bool с didSet. Я хочу сделать что-то, когда переменная изменится, поэтому я попытался использовать didSet. Проблема в том, что когда я использую функцию .toggle () для переключения состояния bool, didSet не вызывается.

Возьмите этот код, например:

import SwiftUI

struct SwiftUIView: View {
    @State var testBool = false {
        didSet {
            print("set")
        }
    }
    var body: some View {
        VStack {
            Button(action: {
                self.testBool.toggle()
            }) {
                Text("Toggle with .toggle()")
            }

            Button(action: {
                if self.testBool {
                    self.testBool = false
                } else {
                    self.testBool = true
                }
            }) {
                Text("Toggle with if")
            }
        }
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView()
    }
}

Все, что у меня есть, это 2 кнопки: - Одна кнопка переключает состояние bool с помощью функции .toggle (). - Следующая кнопка переключает состояние с помощью basi c if / else

. Верхняя кнопка, использующая функцию .toggle (), не печатает «set» в консоли, как ожидалось, с didSet для переменной. Нижняя кнопка работает как положено.

1 Ответ

1 голос
/ 16 апреля 2020

Это известный регрессор компилятора SR-12407 . Возможно, это будет исправлено в следующей версии Xcode.

...