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

Kuh*_*ann 4 toggle didset swiftui

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

提供给 CFRunLoopRunSpecific 的无效模式 'kCFRunLoopCommonModes' - 中断 _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?")
            }
    }
}

Run Code Online (Sandbox Code Playgroud)

如果这是一个错误,我想知道切换的解决方法是什么。我并不是第一个在 iOS 中使用切换的人。;-)

Asp*_*eri 6

  1. 忽略该警告,它是 SwiftUI 内部结构,不会影响任何内容。如果您想向 Apple 提交反馈。

  2. didSet不起作用,因为self这里(作为View结构体)是不可变的,并且@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?")
        }
}
Run Code Online (Sandbox Code Playgroud)