SwiftUI Toggle 无法转换“Bool”类型的值?预期参数类型“Binding<Bool>”

Max*_*Max 2 swiftui

使用 SwiftUI,我尝试设置切换值,但它告诉我 Cannot convert value of type 'Bool?' to expected argument type 'Binding<Bool>' 我从服务器获取数据,并且可解码 json 创建我的模型获取数据成功,但是当我想更改切换时,它会出现错误。

我的代码:

    struct content: View {
        @ObservedObject var articles = Article()
    
        var body: some View{
            
            VStack{
                List{
                    ForEach(articles.article, id: \.id){article in
                        
                        NavigationLink(destination: DetailView()) {
                                
                                ListContent(article: article)
                    }      
                }
            
                }        
            }
         }
    }


struct ListContent: View {
    var article: Article
    
    var body: some View {
        HStack {
            VStack (alignment: .leading) {

              Toggle("", isOn: self.article.isActive)
                .onChange(of: self.article.isActive) { value in
                    print(value)
                }
                
            }
            .padding(.leading,10)
            
            Spacer(minLength: 0)
            
        }     
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法在代码中使用 self.article.isActive 我担心我做错了什么,或者也许我不明白 Toggle 如何与 isOn 一起工作。

欢迎任何帮助或解释!谢谢。

Art*_*sov 6

您需要将 Binding 变量传递给 Toggle 的“isOn”参数。我假设您的“Article”的“isActive”变量具有 Bool 类型。

        Toggle(model.title, isOn: Binding<Bool>(
                get: { model.isActive },
                set: {
                        // $0 is the new Bool value of the toggle
                        // Your code for updating the model, or whatever
                        print("value: \($0)")
                    }
        )
Run Code Online (Sandbox Code Playgroud)

模型示例,以防万一

struct ToggleModel: Hashable {
    init(id: Int, title: String, isActive: Bool) {
        self.id = id
        self.title = title
        self.isActive = isActive
    }

    let id: Int
    let title: String
    let isActive: Bool
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到工作代码示例:https://github.com/yellow-cap/toggle-list-swiftui/blob/master/SwiftUIToggleListExample/SwiftUIToggleListExample/ContentView.swift