Dav*_*vid 5 predicate swift-data
我正在 Xcode 15(测试版)中迁移到 SwiftData,并且很难弄清楚如何在我的一对多模型中形成谓词。期望的结果是返回一个查询,该查询仅返回文章“搜索”字段包含用户正在搜索的字符串的文章和部分。
这是我当前的模型:
@Model
class SectionsSD {
@Attribute(.unique) var id: String
var section: String
var rank: String
var toArticles: [ArticlesSD]?
init(id:String, section: String, rank: String) {
self.id = id
self.section = section
self.rank = rank
}
}
@Model
class ArticlesSD {
var id: String
var title: String
var summary: String
var search: String
var section: String
var body: String
@Relationship(inverse: \SectionsSD.toArticles) var toSection: SectionsSD?
init(id: String, title: String, summary: String, search: String, section: String, body: String) {
self.id = id
self.title = title
self.summary = summary
self.search = search
self.section = section
self.body = body
}
}
Run Code Online (Sandbox Code Playgroud)
在 CoreData 中,我能够在代码中执行以下操作来传递搜索谓词(过滤器是用户输入的搜索文本):
_fetchRequest = FetchRequest<SectionsEntity>(sortDescriptors: [SortDescriptor(\.rank)], predicate: NSPredicate(format: "toArticles.search CONTAINS %@", filter))
Run Code Online (Sandbox Code Playgroud)
我如何到达“toArticles.search”?显然,使用 SwiftData 中的新模型/结构/关系,我无法弄清楚如何形成谓词来实现与以前相同的结果。下面是我尝试过的,但 Xcode 不喜欢它。
let searchPredicate = #Predicate<SectionsSD> { $0.toArticles?.contains(filter) }
_fetchRequest = Query(filter: searchPredicate)
Run Code Online (Sandbox Code Playgroud)
任何有关如何形成该谓词的建议和示例将不胜感激。
您可以尝试嵌套查询
let predicate = #Predicate< SectionsSD > {
$0.toArticles?.contains {
$0.search.contains(filter)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1157 次 |
| 最近记录: |