就像Finder,您给它一个字符串查询,它返回带有匹配字符串的文件列表,我不想使用另一种方法来获取目录中的所有文件,然后逐个迭代以提高性能。问题。
我看着FileManager
,但是没有那样的东西。
答案 0 :(得分:0)
感谢@vadian,我得到了一个提示:
谷歌搜索后实施该方法,希望对您有用。
注意:此方法使用Spotlight搜索,该搜索可以比传统方法更快,但仅限于非系统目录和索引目录。
设置谓词和路径后,您将侦听在结束收集结果时触发的通知。
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()
}