gpt4 book ai didi

ios - 如何异步下载图片并保持顺序?

转载 作者:行者123 更新时间:2023-11-28 11:13:39 25 4
gpt4 key购买 nike

我尝试使用异步请求从 itunes api 下载几个图像,我已经将图像 url 存储在数组中。但是当我下载图像并将其放在新阵列上时,图像顺序变得随机。

这是我的代码:

      for appDict in appArray {
let songCoverUrl: String? = appDict["im:image"][0]["label"].string


let largerImageUrl = songCoverUrl!.stringByReplacingOccurrencesOfString("55x55", withString: "400x400")

if largerImageUrl.isEmpty == false {

let url : NSURL = NSURL(string: largerImageUrl)!

let request : NSURLRequest = NSURLRequest(URL: url)

NSURLSession.sharedSession().dataTaskWithRequest(request){ (imagedata:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
if error == nil {

let image : UIImage = UIImage(data: imagedata!)!
self.coverArray.append(image)

}else{

let image : UIImage = UIImage(named: "noArtworkImage.png")!
self.coverArray.append(image)

}
}.resume()

}
}

如何将图像的顺序保持为 url 数组?

最佳答案

您需要存储 songCoverUrl 对象的原始顺序。

我会建议两种方法之一,预先创建你的数组并使用 [Image?] 允许尚未下载的 nil 条目,然后简单地去:

myArray[indexOfImagesUrlInOriginalList] = justDownloadedImage.

OR 沿着类似的路线使用带有 INDEX 预完成的字典。[NSInteger : UIImage] 并在成功下载后再次找到 url 的索引(使用 response.request.url)

或者更巧妙地将 imageUrl 与图像联系起来:

let lookup = [String : UIImage]()
look[myImageUrl] = justDownloadedImage

然后做一个排序。

事实上,无论哪种方式都需要您在成功完成后检索 URL,然后搜索原始项目数组以找到索引。您可以感染创建一个查找 [String : NSInteger],它是 myLookup[currentUrl] = i(其中 i 是下载前循环的索引)

    var indexLookup = [String : Integer]()  
for index,appDict in enumerate(appArray) {
let songCoverUrl: String? = appDict["im:image"][0]["label"].string
let largerImageUrl = songCoverUrl!.stringByReplacingOccurrencesOfString("55x55", withString: "400x400")
indexLookup[index] = largerImageUrl
//....
}

关于ios - 如何异步下载图片并保持顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33359523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com