我尝试使用异步请求从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对象的原始顺序。
我建议两种方法之一,预先创建数组并使用[图像?]允许未下载的nil条目,然后直接转到:

myArray[indexOfImagesUrlInOriginalList] = justDownloadedImage.

或者用一本事先准备好索引的字典沿着类似的线。
[NSInteger:UIImage]并在成功下载url后再次查找该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
        //....
    }

10-08 05:46
查看更多