toggle - SwiftUI - 开关的使用 - 控制台日志 : “invalid mode ' kCFRunLoopCommonModes'” - didSet does not work

标签 toggle swiftui didset

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

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



除此之外,当我在模拟器中按下切换键时,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 中使用切换的人。 ;-)

最佳答案

  • 忽略该警告,它是 SwiftUI 内部结构,不会影响任何内容。如果您想向 Apple 提交反馈。
  • didSet不起作用,因为 self这里(如 View struct)是不可变的,而 @State只是属性包装器,它通过非变异 setter 将包装的值存储在 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?")
            }
    }
    

    关于toggle - SwiftUI - 开关的使用 - 控制台日志 : “invalid mode ' kCFRunLoopCommonModes'” - didSet does not work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60155947/

    相关文章:

    arrays - 为什么我不能在其 willSet 事件中从数组中删除元素?

    ios - 当其中一个属性发生变化时,监听数据模型数组中的更新

    使用 querySelectorAll() 的 JavaScript Accordion 菜单

    javascript - 如何记住表单提交时的切换状态 - 在 session 变量中显示/隐藏

    iOS SwiftUI : Correctly stack NavigationView with ScrollView and ZStack?

    ios - SwiftUI 中的可选 @ObservableObject

    Swift - didSet 中的弱 self

    javascript - 切换两个复选框

    JQUERY - 确保当用户单击其相应图像时仅显示特定类的一个 div ID,其余设置为隐藏

    macos - 更改插入符号的颜色 SwiftUI TextField MacOS