You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHFetchOptions可用的NSSortDescriptors有哪些?如何查找有效排序键

如何查找PhotoKit中PHFetchOptions可用的排序描述符键值

1. 直接参考PHAsset的公开属性

PHFetchOptions的sortDescriptors支持的键,本质就是PHAsset类的公开属性名。你可以直接在Xcode中按住Option点击PHAsset跳转查看类定义,所有公开属性都能作为排序键使用:

  • 按最后修改日期排序:用modificationDate作为key
    let allPhotosOptions = PHFetchOptions()
    allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "modificationDate", ascending: false)]
    
  • 其他常用键:pixelWidth/pixelHeight(按分辨率排序)、duration(视频时长,仅适用于视频资源)、favorite(按是否收藏排序)等。

2. 文件大小排序的特殊处理

PHAsset没有直接暴露文件大小属性,没法直接用sortDescriptors排序,需要手动获取资源大小后再排序:

// 先获取目标资源集合
let allPhotosOptions = PHFetchOptions()
let allPhotos = PHAsset.fetchAssets(with: .image, options: allPhotosOptions)

// 遍历asset,关联对应的文件大小
var assetSizePairs: [(asset: PHAsset, size: Int64)] = []
allPhotos.enumerateObjects { asset, _, _ in
    let resources = PHAssetResource.assetResources(for: asset)
    // 累加所有资源的文件大小(部分资源可能包含缩略图等,按需调整)
    let totalSize = resources.reduce(Int64(0)) { sum, resource in
        sum + (resource.value(forKey: "fileSize") as? Int64 ?? 0)
    }
    assetSizePairs.append((asset: asset, size: totalSize))
}

// 按文件大小降序排序,提取出排序后的asset数组
let sortedAssets = assetSizePairs.sorted { $0.size > $1.size }.map { $0.asset }

3. 验证键值有效性的小技巧

如果不确定某个属性能不能作为排序键,直接写进去测试即可——如果键无效,Xcode运行时会抛出明确的错误提示,告诉你哪些键是合法的。

内容的提问来源于stack exchange,提问作者Offswitch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:55:02