ios - 如何使用 PHAsset 获取 [PHAssetCollection]
问题描述
我可以得到所有照片,但我不知道如何找到这些照片所在的相册。另一种选择是浏览所有相册并从中获取照片。我认为这不是一个好的选择。目标是获取每张照片的相册名称。
private func getPhotosAll() -> [String:Photo] {
var photos = [String:Photo]()
let assets = PHAsset.fetchAssets(with: .image, options: nil)
assets.enumerateObjects({ (asset, index, stop) in
let id = asset.localIdentifier
guard (id.isEmpty == false) else {
return
}
guard let name = asset.originalFilename else {
return
}
let photo = Photo()
photo.name = name
// TODO: Read albums?
photo.albums = [String]()
photos[id] = photo
})
return photos
}
更新。我只得到用户相册。以及如何得到其余的?(相机胶卷、人物、地点、最近删除)
var albums = Set<String>()
let typesAlbum: [PHAssetCollectionType] = [.album, .smartAlbum, .moment]
for type in typesAlbum {
let collectionsBox = PHAssetCollection.fetchAssetCollectionsContaining(asset,
with: type, options: nil)
collectionsBox.enumerateObjects { (collection, _, _) in
guard let albumName = collection.localizedTitle else {
return
}
albums.insert(albumName)
}
}
解决方案
对于每个 PHAsset,调用fetchAssetCollectionsContaining(_:with:options:)
.
推荐阅读
- neo4j - 高性能邻居导航
- file - 有没有办法使用 Chrome 的 Inspect Element 来定位服务器上哪个文件的代码?
- c++ - 可以包装可调用的文字类型,例如函数或成员函数
- c - 我们如何在 C 中拥有嵌套结构?
- powershell - 如何使用令牌使用“Powershell”connect-AzureAd?
- selection - 为什么`Selection.isCollapsed` 在影子 DOM 中总是正确的?
- apache - htaccess - 只允许访问我的 dhcp ip 地址
- javascript - 如何在 chrome 控制台中查看全局参数或方法的内容?
- ios - (Swift) Cell 什么时候从 StoryBoard 初始化?
- server - 我如何在 Elixir 中允许使用带有 plug_cowboy 的 CORS?