Core Data + SwiftUI:无法将“Bool”类型的值转换为预期的参数类型“Binding<Bool>”

Posted

技术标签:

【中文标题】Core Data + SwiftUI:无法将“Bool”类型的值转换为预期的参数类型“Binding<Bool>”【英文标题】:Core Data + SwiftUI: Cannot convert value of type 'Bool' to expected argument type 'Binding<Bool>' 【发布时间】:2020-06-16 07:21:49 【问题描述】:

我需要一些带有切换的列表。我从 Core Data 实体获得的列表数据。

这是我的代码

// get array products from Core Data
@FetchRequest(fetchRequest: Products.getAllProducts()) var myProducts: FetchedResults<Products>

// here I try to show List
List(myProducts.indices)  index in
    Toggle(isOn: self.myProducts[index].productStatus) 
        Text(self.myProducts[index].productName)
        

属性 isOn 给我错误:无法将类型“Bool”的值转换为预期的参数类型“Binding”

需要做什么?

【问题讨论】:

在我看来就像是 SwiftUI: Cannot convert value of type 'Bool' to expected argument type 'Binding<Bool>' 的副本。 我看到了,但这个决定对我没有帮助。我认为问题出在 Core Data 的数据格式上。但是我不明白问题是什么? ***.com/help/minimal-reproducible-example 【参考方案1】:

我找到了适合我的情况的解决方案

ForEach(myProducts.indices) index in
    Toggle(isOn:
        Binding<Bool>
         (get: return self.myProducts[index].productStatus,
          set:  p in self.myProducts[index].productStatus = p
         )) 
              Text(self.myProducts[index].productName)
         
         .onTapGesture 
              self.myProducts[index].productStatus.toggle()
              do
                  try self.managedObjectContext.save()
              catch
                  print(error)
              
        
 

只有我不明白一行代码: 设置: p in self.myProducts[index].productStatus = p

谁能解释一下?

【讨论】:

以上是关于Core Data + SwiftUI:无法将“Bool”类型的值转换为预期的参数类型“Binding<Bool>”的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 将 Core Data 实体读入 []

SwiftUI Preview 因 Core Data 'NSInvalidArgumentException' 而崩溃

Core Data 更改时更新 Swiftui 视图

SwiftUI Core Data 在 DetailView 中绑定 TextFields

Swift之深入解析如何结合Core Data和SwiftUI

使用 SwiftUI 2.0 和 Core Data 预填充数据