Ios 如何异步下载图像并保持顺序?

Ios 如何异步下载图像并保持顺序?,ios,arrays,swift,asynchronous,imagedownload,Ios,Arrays,Swift,Asynchronous,Imagedownload,我尝试使用异步请求从iTunesAPI下载几个图像,我已经将图像url存储在数组中。但当我下载图像并将其放在新阵列上时,图像顺序变得随机 这是我的密码: for appDict in appArray { let songCoverUrl: String? = appDict["im:image"][0]["label"].string let largerImageUrl = songCoverUrl!.stringByRepla

我尝试使用异步请求从iTunesAPI下载几个图像,我已经将图像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.
或者使用预先编制好索引的词典,沿着类似的路线。 [NSInteger:UIImage]并在成功下载后再次查找url的索引(使用response.request.url)

或者,可以通过以下方式将imageUrl更整齐地绑定到图像:

let lookup = [String : UIImage]()
look[myImageUrl] = justDownloadedImage
然后做一个排序

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


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

我建议使用两种方法之一,预先创建数组并使用[Image?]允许尚未下载的nil条目,然后直接执行:

myArray[indexOfImagesUrlInOriginalList] = justDownloadedImage.
或者使用预先编制好索引的词典,沿着类似的路线。 [NSInteger:UIImage]并在成功下载后再次查找url的索引(使用response.request.url)

或者,可以通过以下方式将imageUrl更整齐地绑定到图像:

let lookup = [String : UIImage]()
look[myImageUrl] = justDownloadedImage
然后做一个排序

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


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

我建议使用两种方法之一,预先创建数组并使用[Image?]允许尚未下载的nil条目,然后直接执行:

myArray[indexOfImagesUrlInOriginalList] = justDownloadedImage.
或者使用预先编制好索引的词典,沿着类似的路线。 [NSInteger:UIImage]并在成功下载后再次查找url的索引(使用response.request.url)

或者,可以通过以下方式将imageUrl更整齐地绑定到图像:

let lookup = [String : UIImage]()
look[myImageUrl] = justDownloadedImage
然后做一个排序

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


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

我建议使用两种方法之一,预先创建数组并使用[Image?]允许尚未下载的nil条目,然后直接执行:

myArray[indexOfImagesUrlInOriginalList] = justDownloadedImage.
或者使用预先编制好索引的词典,沿着类似的路线。 [NSInteger:UIImage]并在成功下载后再次查找url的索引(使用response.request.url)

或者,可以通过以下方式将imageUrl更整齐地绑定到图像:

let lookup = [String : UIImage]()
look[myImageUrl] = justDownloadedImage
然后做一个排序

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


我尝试了
self.coverArray[index]=image
,但我遇到了致命错误:数组索引超出范围。我做错了什么?如果你想使用数组,你必须预先填充它。例如,当数组是可选类型时,为每种类型添加一个nil条目我的数组声明如下
var coverArray:[UIImage?]=[]
,我如何添加一个nil条目?现在转到myArray。添加(nil)的次数与对象的次数相同?有很多方法。您还可以创建一个元组(Url,Image?),并为每个图像创建一个元组,然后最近返回并分配Image属性,在swift中,我们的语法比objective-c好得多。当然,我的意思是数组是元组。选择您认为最容易理解的。我尝试了self.coverArray[index]=image,但我遇到了致命错误:数组索引超出范围。我做错了什么?如果你想使用数组,你必须预先填充它。例如,当数组是可选类型时,为每种类型添加一个nil条目我的数组声明如下
var coverArray:[UIImage?]=[]
,我如何添加一个nil条目?现在转到myArray。添加(nil)的次数与对象的次数相同?有很多方法。您还可以创建一个元组(Url,Image?),并为每个图像创建一个元组,然后最近返回并分配Image属性,在swift中,我们的语法比objective-c好得多。当然,我的意思是数组是元组。选择您认为最容易理解的。我尝试了self.coverArray[index]=image,但我遇到了致命错误:数组索引超出范围。我做错了什么?如果你想使用数组,你必须预先填充它。例如,当数组是可选类型时,为每种类型添加一个nil条目我的数组声明如下
var coverArray:[UIImage?]=[]
,我如何添加一个nil条目?现在转到myArray。添加(nil)的次数与对象的次数相同?有很多方法。您还可以创建一个元组(Url,Image?),并为每个图像创建一个元组,然后最近返回并分配Image属性,在swift中,我们的语法比objective-c好得多。当然,我的意思是数组是元组。选择您认为最容易理解的。我尝试了self.coverArray[index]=image,但我遇到了致命错误:数组索引超出范围。我做错了什么?如果你想使用数组,你必须预先填充它。也就是说,当数组是可选类型时,为每种类型添加一个nil条目。我的数组声明如下