5

我有一个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")  
    }  
} 

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>定义吗?如果不是,我该如何正确解决这个问题?

4

1 回答 1

6

你错过了美元符号:

Toggle(isOn: self.$meetingSetup.twitterEnabled) { ... }

我还注意到你正在使用didSet你的@BindableObject,但你真的应该使用willSet.

最后,也许您粘贴不完整,但您的视图中缺少右括号。

如果您不知道美元符号的用途,请查看 SwiftUI 中的 WWDC2019 视频数据流。

于 2019-07-21T14:38:51.347 回答