SwiftUI通过搜索栏过滤核心数据/NSManagedObject列表

SwiftUI通过搜索栏过滤核心数据/NSManagedObject列表,swift,swiftui,swiftui-list,Swift,Swiftui,Swiftui List,我有一个应用程序,它使用核心数据和填充列表的FetchRequest。我希望能够允许用户通过在搜索栏中键入来搜索/过滤列表。我尝试了一些方法,但似乎无法使其发挥作用 NSManagedObject public class Item: NSManagedObject, Identifiable { @NSManaged public var createdAt: Date? @NSManaged public var title: String? @NSManaged p

我有一个应用程序,它使用核心数据和填充列表的FetchRequest。我希望能够允许用户通过在搜索栏中键入来搜索/过滤列表。我尝试了一些方法,但似乎无法使其发挥作用

NSManagedObject

public class Item: NSManagedObject, Identifiable {
    @NSManaged public var createdAt: Date?
    @NSManaged public var title: String?
    @NSManaged public var details: String?
    @NSManaged public var tag: String?
}
这是我的FetchRequest&搜索状态

@FetchRequest(fetchRequest: Item.getAllData()) var items: FetchedResults<Item>
@State private var searchTerm: String = ""
使用现在的代码,我得到以下错误

“Item”类型的值没有成员“localizedCaseInsensitiveContains”


项目
不是
字符串
项目
包含字符串,因此您需要对其中一个或多个进行筛选。谢谢@Magnas-我想我已经开始理解了。由于
Item
不是一个字符串,而是由这四个字符串组成的,所以我不能过滤掉它,但我可以通过其中一个字符串进行搜索/过滤?我该怎么做呢?例如,如果我想让列表只显示那些带有标记的项目,那么用户正在搜索try
$0.tag.localCase…
这就成功了!非常感谢。我不得不使用
$0.tag!。本地…
任何搜索逻辑或相关任务都应在您的模型中完成!即使答案是针对不同方面的…检查模型中的搜索(过滤器)是如何完成的
VStack {
   SearchBar(text: $searchTerm)
   List {
      ForEach(self.items.filter({
        self.searchTerm.isEmpty ? true :
        $0.localCaseInsensitiveContains(self.searchTerm)
        }), id: \.self){ item in
        ItemView(title: item.title ?? "Title", details: item.details ?? "Details", tag: item.tag ?? "Tag")
        }
    }
}