在我的 UIView 上,我有 3 個 UIImageViews 來加載 3 個影像的 url。眾所周知,3個UIImageView加載圖片是有時間差的,但是我有個要求:3個圖片全部下載完成后,3個UIImageViews同時顯示這3個圖片,怎么辦?
uj5u.com熱心網友回復:
因此,如果我理解正確,您想先下載所有 3 張影像,然后再顯示它們?如果是這樣,我建議使用 DispatchGroup。
let images: [URL] = []
let dispatchGroup = DispatchGroup()
for image in images {
dispatchGroup.enter()
URLSession.shared.dataTask(with: image) { (data, response, error) in
// save image data somewhere
dispatchGroup.leave()
}.resume()
}
dispatchGroup.notify(queue: .main) {
// display images on the image view
}
基本上,它的作用是每當開始下載時您進入調度組,下載完成后您離開它。在每個操作離開組后,您使用通知完成并顯示您想要的內容。
uj5u.com熱心網友回復:
如果您擁有 iOS 13 的最低支持版本并使用 Xcode 13.2,您可以使用asyncandawait來實作:
func loadImages() {
Task {
async let firstImage = loadImage(index: 1)
async let secondImage = loadImage(index: 2)
async let thirdImage = loadImage(index: 3)
let images = await [firstImage, secondImage, thirdImage]
}
}
func loadImage(index: Int) async -> UIImage {
let imageURL = URL(string: urlPathString)!
let request = URLRequest(url: imageURL)
let (data, _) = try! await URLSession.shared.data(for: request, delegate: nil)
print("Finished loading image \(index)")
return UIImage(data: data)!
}
資料來源:SwiftLee:異步讓解釋:并行呼叫異步函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/405073.html
標籤:
