for i in 0..<array.count
{
let escapedString = array[i].addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
var c = ""
DispatchQueue.main.async {
Alamofire.request("url&mfileName=\(escapedString!)").responseJSON { response in
switch response.result{
case .success(let data) :
let json = JSON(data)
c = json["imageBase64"].stringValue
if let decodedData = Data(base64Encoded: c , options: .ignoreUnknownCharacters) {
let image = UIImage(data: decodedData)!
//self.docimages.append(image!)
self.docimages.append(image)
}
break
case .failure(let error) :
print(error)
break
}
}
}
}
我有一系列图像路径。我必须进行API调用以获取每个图像的字节数组。获得数组后,我必须将它添加到图像数组。
问题是图像的下载顺序与初始阵列的顺序不同。有没有什么办法可以按照与初始数组相同的顺序下载图像。
答案 0 :(得分:0)
是的,你可以。有多种方法可以做到这一点。但在这里,我将以最简单的方式向您解释。
在这里,你犯了一个错误。您需要创建一个staging
,如下所示。
STEP:1
live
STEP:2 现在,使用for循环,您将拥有类对象与索引&amp; ImagePath 驻留在其中。
STEP:3 最后一步,您只需要分配刚刚下载到此类对象的UIImage。
答案 1 :(得分:0)
是您可以使用以下方法以相同的顺序下载图像
//Declare the Variables Globally
var imageDownloadArrayString = [String]()
var imageDownloadArray = [UIImage]()
var imageUrl : [URL] = []
// Put the your image path
for imageUrls in imagePathArray { // put your image path array
//self.imageDownloadArrayString.append(imageUrls) // imagePathArray in String
self.imageUrl.append((URL(string:imageUrls)! as NSURL) as URL)
}
//Download the images
DispatchQueue.main.async(execute: {
for url in self.imageUrl {
let image = try! UIImage(data: Data(contentsOf: url))
self.imageDownloadArray.append(image!)
}
}
此imageDownloadArray包含图像的顺序。有疑问请问我?这段代码对我有用!
答案 2 :(得分:0)
您可以将AsyncBlockOperation与OperationQueue一起使用 在其他图像开始下载之前强制每个图像竞争请检查图像
实施例
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 1
downloadImage(path: "path1")
downloadImage(path: "path2")
downloadImage(path: "path3")
downloadImage(path: "path4")
downloadImage(path: "path5")
func downloadImage(path:String){
queue.addOperationWithAsyncBlock { op in
Alamofire.request(path).responseJSON { response in
switch response.result{
case .success(let data) :
let json = JSON(data)
c = json["imageBase64"].stringValue
if let decodedData = Data(base64Encoded: c , options: .ignoreUnknownCharacters) {
let image = UIImage(data: decodedData)!
//self.docimages.append(image!)
self.docimages.append(image)
op.complete()
}
break
case .failure(let error) :
print(error)
break
}
}
}
}