我想知道如何使用异步/等待在由斯威夫特。
var data = [String]()
func uploadImage(images: [UIImage]) async -> Array<String> {
for image in images{
ImageUploader.uploadImages(image: image, type: .post) { imageUrl async in
await self.data.append(imageUrl)
}
}
return data
}
static func uploadImages(image: UIImage,type: UploadType,completion: @escaping(String) -> Void) async{
guard let imageData = image.jpegData(compressionQuality: 0.5) else{return}
let ref = type.filePath
ref.putData(imageData,metadata: nil){ _, error in
if let error = error{
print("DEBUG: Failed to upload image\(error.localizedDescription)")
return
}
print("Successfully uploaded image")
ref.downloadURL{ url, _ in
guard let imageUrl = url?.absoluteString else {return}
completion(imageUrl)
}
}
}
当我调用func uploadImage时,没有等待self.data.append(imageUrl)
数据返回空数组。
我想让uploadImage
等待append
,那么字符串数组应该返回包含uploadImages的imageUrl的数组。
我该怎么更正呢。谢谢。
1条答案
按热度按时间fykwrbwg1#
看起来自从我上次看API Firebase以来,它已经提供了自己的
async/await
方法。用于上传图像的是imageRef.putDataAsync(imageData)
。然后,您可以使用
withThrowingTaskGroup
同时上载,或者使用常规for
循环1x1上载。