在
swift 3中,该方法向我展示了“模糊地使用’enumerateObjects’”,发生了什么.我该怎么办?
extension PHFetchResult { public func assetCollection() -> [PHAssetCollection] { var list :[PHAssetCollection] = [] self.enumerateObjects { (object,index,stop) in if object is PHAssetCollection { let collection = object as! PHAssetCollection list.append(collection) } } return list } }
做类似这样的事.您不能直接为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返回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 }) } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。