4

我在使用 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?")
            }
    }
}

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

4

1 回答 1

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?")
        }
}
于 2020-02-10T19:15:42.990 回答