【发布时间】:2022-10-16 06:57:52
【问题描述】:
我的代码:
//search all of applications
let queryString = "kMDItemContentTypeTree=com.apple.application"
// sort by last metadata change
let sorting = [kMDItemAttributeChangeDate] as CFArray
// create query and assign sorting param
let query = MDQueryCreate(kCFAllocatorDefault, queryString as CFString, nil, sorting)
// ISSUE HERE
// Set comparation block that called for sorting
MDQuerySetSortComparatorBlock(query, {
if let date1 = $0 as? Date,
let date2 = $1 as? Date {
return date1 < date2 ? .compareLessThan : .compareGreaterThan
}
return CFComparisonResult.compareEqualTo
})
MDQuerySetDispatchQueue(query, DispatchQueue(label: "background", qos: .background) )
MDQueryExecute(query, CFOptionFlags())
问题是以正确的方式编写 MDQuerySetSortComparatorBlock - 我不明白它必须如何编写
我看到警告:
从 'UnsafePointer<Unmanaged?>?' 转换(又名 'Optional<UnsafePointer<Optional<Unmanaged>>>') 到 不相关的类型“日期”总是失败
【问题讨论】:
-
Unmanaged总是那么有趣。我认为您必须致电.takeRetainedValue()或.takeUnretainedValue()。我猜是前者。所以我想应该是if let date1 = $0?.pointee?.takeRetainedValue() as? Date -
@ChipJarred 谢谢,它有效!将其发布为答案)
-
我会去做的。我很高兴我的猜测是正确的(或者至少是正确的),尽管是一个模糊的消息。
标签: swift macos spotlight mdquery