SwiftUI - 开关的使用 - 控制台日志:“无效模式 'kCFRunLoopCommonModes'” - didSet 不起作用

SwiftUI - usage of toggles - console logs: “invalid mode 'kCFRunLoopCommonModes'” - didSet does not work

我在使用 SwiftUI 切换时遇到一个普遍问题。 每当我使用它们时,我都会收到此控制台错误:

invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.

除此之外,当我在模拟器中按下开关时,didSet 不打印任何内容。 有没有人有想法,或者这是一个 SwiftUI 错误?

几个月前 Whosebug 上的其他相关问题似乎没有找到解决方案。

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. 忽略那个警告,它是 SwiftUI 的内部结构,不会影响任何东西。如果您想向 Apple 提交反馈。

  2. didSet 不起作用,因为这里的 self(作为 View 结构)是不可变的,而 @State 只是 属性 包装器,通过非变异 setter 将包装值存储在 self.

  3. 之外

更新: 在切换时做点什么

@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?")
        }
}