このnohのようなことをしてください。 PHFetchResult
の拡張子は、汎用パラメータPHFetchResult<ObjectType>
として他のObjectTypeがあるため、直接追加することはできません。だからあなたは何か他のことをしなければならない。
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
戻り、ここでPHFetchResult<PHAssetCollection>
PHAssetCollection
PHFetchResult
ためObjectType
です。 objectTypeを指定していないため、あいまいなエラーが表示されます。
これにアプローチする一般的な方法。
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
}
}
スウィフト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
})
}
}
なぜfun(enumerationOptions.concurrent)のトレイルに追加 – six
私はこれを動作させることができません。エニュメレーションオプションを追加しようとすると、「引数ラベル」(_:、_ :)は使用可能なオーバーロードと一致しませんでしたが、オプションを削除しても、あいまいなものとして表示されます。 –