哪里可以找到 NSPredicate for Core Data 的 SUBQUERY 功能的文档?
最佳答案
好问题...这似乎没有很好的记录。
这是我发现的:
- 大多数文档可以在 NSExpression(forSubquery:usingIteratorVariable:predicate:) documentation 找到。 。它包含两个示例和语法:
SUBQUERY(collection_expression, variable_expression, predicate);
- NSExpression简要提及子查询表达式和
NSSubqueryExpressionType
,这是您在谓词中指定SUBQUERY
时使用的内容。 - 查找文档最合理的位置是 Predicate Programming Guide ,但只是提到了几次;在 String Comparisons ,以及 Reserved Words部分。
- 您可以尝试Google search limited to apple.com ,但这仅返回 53 个结果。
更新:
通过添加应用扩展,Apple 包含了更多 SUBQUERY 示例,因为复杂的匹配逻辑需要它们。
在 String Comparisons Predicate Programming Guide 部分,它现在包含如何匹配 UTI 的示例:
SUBQUERY ( extensionItems, $extensionItem, SUBQUERY ( $extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf" ).@count == $extensionItem.attachments.@count ).@count == 1
您可以在应用程序扩展编程指南 > 应用程序扩展要点 > Handling Common Scenarios section 中找到更复杂的示例。 :
SUBQUERY ( extensionItems, $extensionItem, SUBQUERY ( $extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "org.appextension.action-one" || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "org.appextension.action-two" ).@count == $extensionItem.attachments.@count ).@count == 1
还有一个 NSPredicate Cheatsheet其中讨论了 SUBQUERY 以及其他几个 NSPredicate 功能。
本质上每个SUBQUERY
都相当于Swift中的filter
。并且 ANY
相当于 contains
。
所以再次举这个例子:
SUBQUERY (
extensionItems,
$extensionItem,
SUBQUERY (
$extensionItem.attachments,
$attachment,
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf"
).@count == $extensionItem.attachments.@count
).@count == 1
这与 Swift 中的类似:
extensionItems.filter {
$0.attachments.filter {
$0.registeredTypeIdentifiers.contains {
$0.utiConformsTo("com.adobe.pdf")
}
}.count == $0.attachments.count
}.count == 1
关于iphone - 在哪里可以找到 NSPredicate for Core Data 的 SUBQUERY 功能的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3076618/