이 noh와 같이하십시오. PHFetchResult
에 대한 확장자를 직접 추가 할 수 없습니다. 다른 ObjectType이 일반 매개 변수 PHFetchResult<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
반환 여기 PHAssetCollection
PHFetchResult<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
})
}
}
재미 – six
의 흔적 (EnumerationOptions.concurrent)를 추가 내가 왜이 작업을 얻을 수 없습니다. 열거 옵션을 추가하려고하면 "Argument labels '(_ :, _ :)은 사용 가능한 오버로드와 일치하지 않지만 옵션을 제거하면 여전히 모호한 용도로 표시됩니다. –