Cara menggunakan PHAsset untuk mendapatkan [PHAssetCollection]

Saya bisa mendapatkan semua fotonya, tetapi saya tidak tahu bagaimana menemukan album tempat foto-foto ini berada. Pilihan lainnya adalah menelusuri semua album dan mengambil fotonya. Saya pikir ini bukan pilihan yang baik. Tujuannya adalah untuk mendapatkan nama album untuk setiap foto.

    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
    }

Memperbarui. Saya hanya mendapatkan album pengguna. Dan bagaimana cara mendapatkan sisanya? (Rol Kamera, Orang, Tempat, Baru Dihapus)

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)
    }
}

person Oleg Privalov    schedule 29.08.2018    source sumber


Jawaban (1)


Untuk setiap PHAsset, hubungi fetchAssetCollectionsContaining(_:with:options:).

person matt    schedule 29.08.2018
comment
Dapatkah saya yakin bahwa dengan menentukan [.album, .smartAlbum, .moment], apakah saya akan mendapatkan semua album dari foto tersebut? - person Oleg Privalov; 29.08.2018