Fare qualcosa del genere no. Non è possibile aggiungere direttamente l'estensione per PHFetchResult
perché ha un altro ObjectType come parametro generico PHFetchResult<ObjectType>
. Quindi devi fare qualcos'altro.
class FetchPhoto {
class func assetCollection() -> [PHAssetCollection] {
var list :[PHAssetCollection] = []
PHAssetCollection.fetchMoments(with: nil).enumerateObjects(EnumerationOptions.concurrent) { (collection, _, _) in
list.append(collection)
}
return list
}
}
PHAssetCollection.fetchMoments
rendimenti PHFetchResult<PHAssetCollection>
qui PHAssetCollection
è il ObjectType
per il PHFetchResult
. Hai ottenuto l'errore ambiguo perché non hai specificato objectType.
Un modo generico per avvicinarsi a questo.
class FetchPhoto {
class func assetCollection<T : PHObject>(result : PHFetchResult<T>) -> [T] {
var list : [T] = []
result.enumerateObjects(EnumerationOptions.concurrent) { (object, _, _) in
list.append(object)
}
return list
}
}
Swift 3
class PhotosHelper {
class func fetchAllLocalIdentifiersOfPhotos(completion : (_ localIdentifiers : [String]) ->()) {
let photos : PHFetchResult<PHAsset> = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: nil)
photos.enumerateObjects ({ _,_,_ in
// Do your operations, you can see that there is no warnings/errors in this one
})
}
}
fonte
2016-06-21 06:14:58
Perché aggiungere (EnumerationOptions.concurrent) per percorso di divertimento – six
non riesco a farlo funzionare. Quando provo ad aggiungere opzioni di enumerazione ottengo "etichette Argument" (_:, _ :) non corrispondono a nessun sovraccarico disponibile ", ma quando rimuovo le opzioni è ancora visualizzato come uso ambiguo .. –