【发布时间】:2018-02-27 20:08:32
【问题描述】:
我有一个PHAssets 的数组,所以我想将它转换为URL 的数组
func getURL(ofPhotoWith mPhasset: PHAsset, completionHandler : @escaping ((_ responseURL : URL?) -> Void)) {
let options: PHContentEditingInputRequestOptions = PHContentEditingInputRequestOptions()
options.canHandleAdjustmentData = {(adjustmeta: PHAdjustmentData) -> Bool in
return true
}
mPhasset.requestContentEditingInput(with: options, completionHandler: { (contentEditingInput, info) in
completionHandler(contentEditingInput!.fullSizeImageURL)
})
}
func getUrlsFromPHAssets(assets:[PHAsset], completion: @escaping ((_ urls:[URL]) -> ())){
var arrUrl:[URL] = []
for asset in assets {
self.getURL(ofPhotoWith: asset) { (url) in
arrUrl.append(url!)
}
}
completion(arrUrl)
}
我在 main 中调用下面的函数。
self.getUrlsFromPHAssets(assets: assets, completion: { (urls) in
print(urls)
})
那么,在函数getUrlsFromPHAssets 中,如何等待将url 附加到url 数组的循环完成然后返回。
更新函数
getUrlsFromPHAssets:
func getUrlsFromPHAssets(assets:[PHAsset], completion: @escaping ((_ urls:[URL]) -> ())){
var arrUrl:[URL] = []
var index:Int = 0
for asset in assets {
self.getURL(ofPhotoWith: asset, completionHandler: { (url) in
arrUrl.append(url!)
if index == assets.count - 1 {
completion(arrUrl)
}
index = index + 1
})
}
}
更新功能后,结果似乎还可以,但我不确定它是否会随时更正。
【问题讨论】:
标签: ios swift asynchronous