Zrób coś takiego jak to. Nie można bezpośrednio dodać rozszerzenia dla PHFetchResult
, ponieważ ma on inny typ ObjectType jako ogólny parametr PHFetchResult<ObjectType>
. Więc musisz zrobić coś innego.
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
powraca PHFetchResult<PHAssetCollection>
tutaj PHAssetCollection
jest ObjectType
dla PHFetchResult
. Masz niejednoznaczny błąd, ponieważ nie określono właściwości objectType.
Ogólny sposób podejścia do tego.
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
})
}
}
dlaczego dodawać (EnumerationOptions.concurrent) do szlaku zabawy – six
Nie mogę tego uruchomić. Kiedy próbuję dodać opcje wyliczania, otrzymuję "etykiety argumentów" (_:, _ :) nie pasują do żadnych dostępnych przeciążeń ", ale kiedy usuwam opcje, to wciąż jest to niejednoznaczne użycie. –