'Bool' 在 SwiftUI 中无法转换为 'Binding<Bool>'
'Bool' is not convertible to 'Binding<Bool>' in SwiftUI
我有一个正在开发的 SwiftUI
本机 Watch 应用程序。我有一个基于 Combine
的 class,它允许我存储 `\userDefaults,其中之一是一个简单的切换。
import SwiftUI
import Foundation
import Combine
class MeetingSetup: BindableObject {
let willChange = PassthroughSubject<Void, Never>()
var twitterEnabled: Bool = false {
didSet {
willChange.send()
}
}
init() {
let prefs:UserDefaults = UserDefaults(suiteName: "group.com.appname")!
twitterEnabled = prefs.bool(forKey: "keyTwitterEnabledBool")
}
}
在 SwiftUI
中,我收到 Bool
无法转换为 Binding<Bool>
的错误消息
import SwiftUI
import Combine
struct SetupView : View {
@ObjectBinding var meetingSetup: MeetingSetup = delegate.meetingSetup
var body: some View {
HStack{
Toggle(isOn: self.meetingSetup.twitterEnabled){ // <== 'Bool' in not convertible to 'Binding<Bool>'
Text("Twitter")
}
}
}
我不明白为什么会收到消息,因为代码是 @ObjectBinding
,根据定义,它不应该是 Binding<Bool>
吗?如果不是,我该如何正确解决这个问题?
您错过了美元符号:
Toggle(isOn: self.$meetingSetup.twitterEnabled) { ... }
我还注意到您在 @BindableObject
中使用了 didSet
,但您实际上应该使用 willSet
。
最后,也许您粘贴的内容不完整,但您的视图中缺少右括号。
如果您不知道美元符号是什么意思,请查看 SwiftUI 中的 WWDC2019 视频数据流。
我有一个正在开发的 SwiftUI
本机 Watch 应用程序。我有一个基于 Combine
的 class,它允许我存储 `\userDefaults,其中之一是一个简单的切换。
import SwiftUI
import Foundation
import Combine
class MeetingSetup: BindableObject {
let willChange = PassthroughSubject<Void, Never>()
var twitterEnabled: Bool = false {
didSet {
willChange.send()
}
}
init() {
let prefs:UserDefaults = UserDefaults(suiteName: "group.com.appname")!
twitterEnabled = prefs.bool(forKey: "keyTwitterEnabledBool")
}
}
在 SwiftUI
中,我收到 Bool
无法转换为 Binding<Bool>
import SwiftUI
import Combine
struct SetupView : View {
@ObjectBinding var meetingSetup: MeetingSetup = delegate.meetingSetup
var body: some View {
HStack{
Toggle(isOn: self.meetingSetup.twitterEnabled){ // <== 'Bool' in not convertible to 'Binding<Bool>'
Text("Twitter")
}
}
}
我不明白为什么会收到消息,因为代码是 @ObjectBinding
,根据定义,它不应该是 Binding<Bool>
吗?如果不是,我该如何正确解决这个问题?
您错过了美元符号:
Toggle(isOn: self.$meetingSetup.twitterEnabled) { ... }
我还注意到您在 @BindableObject
中使用了 didSet
,但您实际上应该使用 willSet
。
最后,也许您粘贴的内容不完整,但您的视图中缺少右括号。
如果您不知道美元符号是什么意思,请查看 SwiftUI 中的 WWDC2019 视频数据流。