我有一个我正在开发的SwiftUI原生 Watch 应用程序。我有一个Combine基础类,它允许我存储 `\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")
}
}
Run Code Online (Sandbox Code Playgroud)
在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")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这是收到消息,因为代码是@ObjectBinding,不应该Binding<Bool>是定义吗?如果不是,我该如何正确解决这个问题?
你错过了美元符号:
Toggle(isOn: self.$meetingSetup.twitterEnabled) { ... }
Run Code Online (Sandbox Code Playgroud)
我还注意到你didSet在你的@BindableObject, 但你真的应该使用willSet.
最后,也许您粘贴的不完整,但是您的视图中缺少一个右括号。
如果您不知道美元符号是什么,请查看 SwiftUI 中的 WWDC2019 视频数据流。
| 归档时间: |
|
| 查看次数: |
7186 次 |
| 最近记录: |