swift Core Data @fetchreqeust是否可以指定特定字段?

clj7thdc  于 11个月前  发布在  Swift
关注(0)|答案(1)|浏览(73)

有没有一种简洁的方法可以只从@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 })
}
t5zmwmid

t5zmwmid1#

您可以合并this@FetchRequest初始化器:

init(fetchRequest: NSFetchRequest<Result>, animation: Animation? = nil)

关于this stackoverflow这将允许您创建一个自定义的NSFetchRequest,它只查询对象的单个列,并允许您将其传递到@FetchRequest中。我没有试过这个,但我认为它会工作。
话虽如此,我确实认为在任何情况下使用常规的@FetchRequest并通过managedObject.id获取属性会更容易,而且我不认为只查询单个列会节省太多性能。

相关问题