Где найти документацию функции SUBQUERY NSPredicate для Базовых Данных?

Где найти документацию функции SUBQUERY NSPredicate для Базовых Данных?

6
задан dontWatchMyProfile 19 June 2010 в 17:59
поделиться

1 ответ

Хороший вопрос... кажется, что это не очень хорошо документировано.

Вот что я нашел:

Обновление:

С добавлением расширений приложений Apple включила больше примеров SUBQUERY, поскольку они необходимы для сложной логики сопоставления.

  • В разделе Сравнение строк руководства Руководство по программированию предикатов теперь есть пример соответствия UTI:

    SUBQUERY (
     extensionItems,
     $extensionItem,
     SUBQUERY (
     $extensionItem.attachments,
     $attachment,
     ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf"
     ).@count == $extensionItem.attachments.@count
    ).@count == 1
    
  • Более сложный пример вы можете найти в разделе Обработка общих сценариев:

    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 эквивалентен filter в Swift. А 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
7
ответ дан 17 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: