Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.4k views
in Technique[技术] by (71.8m points)

SwiftUI Toggle Cannot convert value of type 'Bool?' to expected argument type 'Binding<Bool>'

With SwiftUI, I'm trying to set the toggle value, but it talk me Cannot convert value of type 'Bool?' to expected argument type 'Binding<Bool>' I Get data from the server, and Decodable the json create my model get data is successful, but when I want to change the Toggle it's Get the error.

MY CODE:

    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)
            
        }     
    }
}

I can't use self.article.isActive in my code I'm afraid I'm doing something wrong or maybe I don't get how the Toggle work with isOn.

Any help or explanation is welcome! Thank you.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You should bound Toggle to ObservedObject wrapper, like

struct ListContent: View {
    @ObservedObject var article: Article        // << here !!
    
    var body: some View {
        HStack {
            VStack (alignment: .leading) {

              Toggle("", isOn: $article.isActive)         // << binding !!
                .onChange(of: article.isActive) { value in
                    print(value)
                }

// ... other code

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...