我在使用 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 中使用切换的人。 ;-)
最佳答案
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/