CoreStore 重新获取谓词 NSFetchRequest 问题
CoreStore refetch predicate NSFetchRequest issue
如果我弄清楚了,我需要在搜索内容时重新获取监视器:
我有这个功能可以用提供的字符串重新获取
func search(searchText: String) {
self.monitor.refetch(.where(format: "%K CONTAINS[cd] %@", #keyPath(ListEntityType.name), searchText),
OrderBy<ListEntityType>(.ascending("name")))
}
但是这段代码是不可编译的,只有下面这个:
func search(searchText: String) {
self.monitor.refetch(Where<ListEntityType>("name", isEqualTo: searchText),
OrderBy<ListEntityType>(.ascending("name")))
}
但这里只是相等操作,但我不仅需要搜索整个单词,还需要搜索 format: "%K CONTAINS[cd] %@
的子字符串
来自 CoreStore 的函数 refetch 是这样的:
public func refetch(_ fetchClauses: [FetchClause]) {
self.refetch { (fetchRequest) in
fetchClauses.forEach { [=12=].applyToFetchRequest(fetchRequest) }
}
}
public protocol FetchClause {
func applyToFetchRequest<T>(_ fetchRequest: NSFetchRequest<T>)
}
只需替换为:
.where(format: "%K CONTAINS[cd] %@", #keyPath(ListEntityType.name), searchText)
和
Where<ListEntityType>("%K CONTAINS[cd] %@", #keyPath(ListEntityType.name), searchText)
另一个语法糖:您可以去掉#keyPath 引用并使用 \ListEntityType.name 代替
如果我弄清楚了,我需要在搜索内容时重新获取监视器:
我有这个功能可以用提供的字符串重新获取
func search(searchText: String) {
self.monitor.refetch(.where(format: "%K CONTAINS[cd] %@", #keyPath(ListEntityType.name), searchText),
OrderBy<ListEntityType>(.ascending("name")))
}
但是这段代码是不可编译的,只有下面这个:
func search(searchText: String) {
self.monitor.refetch(Where<ListEntityType>("name", isEqualTo: searchText),
OrderBy<ListEntityType>(.ascending("name")))
}
但这里只是相等操作,但我不仅需要搜索整个单词,还需要搜索 format: "%K CONTAINS[cd] %@
来自 CoreStore 的函数 refetch 是这样的:
public func refetch(_ fetchClauses: [FetchClause]) {
self.refetch { (fetchRequest) in
fetchClauses.forEach { [=12=].applyToFetchRequest(fetchRequest) }
}
}
public protocol FetchClause {
func applyToFetchRequest<T>(_ fetchRequest: NSFetchRequest<T>)
}
只需替换为:
.where(format: "%K CONTAINS[cd] %@", #keyPath(ListEntityType.name), searchText)
和
Where<ListEntityType>("%K CONTAINS[cd] %@", #keyPath(ListEntityType.name), searchText)
另一个语法糖:您可以去掉#keyPath 引用并使用 \ListEntityType.name 代替