Как искать файл / папку по строковому запросу в OS X? - PullRequest
0 голосов
/ 24 мая 2019

Как и Finder, вы задаете ему строковый запрос, и он возвращает список файлов с совпадающей строкой. Я не хочу использовать другой метод, чтобы получить все файлы в каталоге и затем повторять его один за другим для повышения производительности.проблемы.

Я посмотрел в FileManager, но ничего подобного нет.

1 Ответ

0 голосов
/ 24 мая 2019

Благодаря @vadian я получил подсказку:

Реализовал метод после небольшого поиска, надеюсь, вы найдете его полезным.

Примечание. В этом методе используется точечный поиск, который может быть быстрее традиционных методов, но он ограничен несистемными и индексированными каталогами.

После установки предиката и путей вы прослушиваете уведомление, срабатывающее при завершении сбора результатов.

func getFiles(in paths: [String], query: String) {
    let queryMeta = NSMetadataQuery()
    let nf = NotificationCenter.default
    nf.addObserver(forName: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: nil, queue: operationQueue, using:{_ in
        queryMeta.disableUpdates()
        print(queryMeta.results.count)
        for item in queryMeta.results {
            if let itemMeta = item as? NSMetadataItem, let name = itemMeta.value(forAttribute: NSMetadataItemPathKey) {
                print(name)
            }
        }
    })
    queryMeta.searchScopes = paths
    queryMeta.predicate = NSPredicate(format: "%K CONTAINS[c] '\(query)'", NSMetadataItemFSNameKey)
    print("Starting searching for query: \(query)")
    queryMeta.start()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...