有没有一种简洁的方法可以只从@fetchreqeust中拉回一个字段,这样我就可以看到来自Core Data的@fetchrequest的结果中是否存在特定的id(UUID)?
我有一个请求,它带回了一个令牌列表,每个令牌都有一个UUID ID:
@FetchRequest(sortDescriptors: [SortDescriptor(\.id)])
var tokens: FetchedResults<Token>
我试图创建一个函数来查看令牌是否已经下载,它应该看起来像这样:
func isDownloaded(tokenId: UUID) -> Bool {
return tokens.contains(tokenId)
}
我可以更改@fetchrequest以只提取令牌ID的列表吗?当我做这样的事情时:
@FetchRequest(sortDescriptors: [SortDescriptor(\.id)])
var tokens: FetchedResults<Token.ID>
我得到一个错误:
类型“Token.ID”(又名“Optional”)不符合协议“NSFetchRequestResult”
我看到this post是为了在插入之前检查记录是否存在,但这不是我想要做的。我需要的ID的列表,我已经下载到核心数据,所以我甚至不允许用户下载令牌。所以我想检查一下,因为我正在循环通过列表显示,看看我是否应该启用下载按钮或没有。每次都做一次抓取似乎很麻烦。
更新
根据@joshgalv的回应和@JoakimDanielson的评论,最后是这样的:
func isDownloaded(tokenId: UUID) -> Bool {
tokens.contains(where: { $0.id == tokenId })
}
1条答案
按热度按时间t5zmwmid1#
您可以合并this
@FetchRequest
初始化器:关于this stackoverflow这将允许您创建一个自定义的
NSFetchRequest
,它只查询对象的单个列,并允许您将其传递到@FetchRequest
中。我没有试过这个,但我认为它会工作。话虽如此,我确实认为在任何情况下使用常规的
@FetchRequest
并通过managedObject.id
获取属性会更容易,而且我不认为只查询单个列会节省太多性能。