我有一个SwiftUI本地手表应用程序,我正在工作。我有一个基于Combine的类,它允许我存储`\userDefault,其中一个是简单的切换。
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>吗?如果不是,我该如何正确地解决这个问题?
发布于 2019-07-21 14:38:51
你错过了美元标志:
Toggle(isOn: self.$meetingSetup.twitterEnabled) { ... }我还注意到在您的@BindableObject中使用的是@BindableObject,但是您确实应该使用willSet。
最后,也许你不完全粘贴,但你错过了一个结束括号在你的看法。
如果您不知道美元标志是什么,请查看SwiftUI.中的WWDC2019视频数据流。
https://stackoverflow.com/questions/57133806
复制相似问题