在 NSPredicate 中绑定 var - SwiftUI

Posted

技术标签:

【中文标题】在 NSPredicate 中绑定 var - SwiftUI【英文标题】:Binding var inside NSPredicate - SwiftUI 【发布时间】:2021-03-27 06:26:45 【问题描述】:

我正在尝试在我的 Codre Data 过滤器中编写一个动态过滤器,如下所示(使用 SwiftUI):

@State var NumberOfRooms: Int
    init(NumberOfRooms: Int) 
        self.NumberOfRooms = NumberOfRooms
    

    @FetchRequest(entity: Listing.entity(),sortDescriptors:[NSSortDescriptor(keyPath: \Listing.publishdate, ascending: false),],predicate: NSPredicate(format: "category == %@ AND rooms ", "House", "\($NumberOfRooms)"))

在视图中我想像这样修改变量的值:

Text("2")
      .onTapGesture 
       self.NumberOfRooms = 2
       

我在 NSPredicate 收到错误:

不能在属性初始化器中使用实例成员“$NumberOfRooms”;属性初始化器在“self”可用之前运行

基本上我想动态组合谓词。 非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

像这样在 init 中初始化您的请求。

var fetchRequest: FetchRequest<Listing>

@State var NumberOfRooms: Int = 10

init(NumberOfRooms: Int) 
    fetchRequest = FetchRequest<BlogIdea>(entity: Listing.entity(),sortDescriptors:[],predicate: NSPredicate(format: "category == %@ AND rooms ", "House", "\(NumberOfRooms)"))
    self.NumberOfRooms = NumberOfRooms

【讨论】:

我收到错误:变量“self.fetchRequest”在初始化之前使用 和:从初始化程序返回而不初始化所有存储的属性 检查更新!! 现在我得到:在范围内找不到“NSEntityDescription” 传递你的实体Listing.entity()

以上是关于在 NSPredicate 中绑定 var - SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa 中的自定义 NSPredicate

在 NSPredicate 中使用 ALL/ANY/NONE

使用 NSPredicate 和数组进行 cloudKit 搜索

Core Data NSPredicate 过滤结果

带有 NSNumber 的 NSArray 的 NSPredicate(核心数据)

Angular 2:是不是可以在动态组件中绑定 var?