SwiftUI - использование переключателей - консольные журналы: «недопустимый режим« kCFRunLoopCommonModes »» - didSet не работает - PullRequest
2 голосов
/ 10 февраля 2020

У меня есть общая проблема с использованием переключателей с SwiftUI. Всякий раз, когда я их использую, я получаю эту консольную ошибку:

неверный режим 'kCFRunLoopCommonModes', предоставленный CFRunLoopRunSpecifi c - прерывание на _CFRunLoopError_RunCalledWithInvalidMode для отладки. Это сообщение будет появляться только один раз за исполнение.

В дополнение к этому didSet ничего не печатает, когда я нажимаю на переключатель в симуляторе. У кого-нибудь есть идея, или это ошибка SwiftUI?

Другие связанные вопросы по StackOverflow, которым несколько месяцев назад, похоже, не нашли решения.

import SwiftUI


struct ContentView: View {

    @State private var notifyCheck = false {
        didSet {
            print("Toggle pushed!")
        }
    }

    var body: some View {
            Toggle(isOn: $notifyCheck) {
                Text("Activate?")
            }
    }
}

Если это ошибка, мне интересно, что обходной путь для переключателей. Это не так, как если бы я был первым человеком, использующим переключатели в iOS. ; -)

1 Ответ

2 голосов
/ 10 февраля 2020
  1. Игнорируйте это предупреждение, это внутреннее устройство SwiftUI и ни на что не влияет. Если вы хотите оставить отзыв в Apple.

  2. didSet не работает, потому что self здесь (как View struct) является неизменяемым, а @State является просто оболочкой свойства, которая через установщик неизменяемого набора сохраняет обернутые значение вне self.

Обновление: сделать что-нибудь при переключении

@State private var notifyCheck = false

var body: some View {

        let bindingOn = Binding<Bool> (
           get: { self.notifyCheck },
           set: { newValue in
               self.notifyCheck = newValue
               // << do anything
           }
        )
        return Toggle(isOn: bindingOn) {
            Text("Activate?")
        }
}
...