使用alamofire下载图像 - iOS

时间:2017-01-15 16:19:23

标签: ios alamofire alamofireimage

我使用Alamofire从服务器获取数据,然后将它们放入CarTypeCarType对象数组中,name是我的结构。我从服务器获得的是idiconUrlicon。来自iconUrls我想下载图标并将它们放在icon中。之后,我会在集合视图中使用namevar info = [CarType]() Alamofire.request(.GET,"url") .responseJSON { response in for (_,subJson):(String, JSON) in json["result"] { let name = subJson["name"].string let iconUrl = subJson["icon"].string let id = subJson["id"].int info.append(CarType(id: id!, name: name!, iconUrl: iconUrl! , image: UIImage())) } 。我的Alamofire请求是:

import Foundation
import UIKit

struct CarType {
    var name : String
    var id : Int
    var iconUrl : String
    var icon : UIImage
}

我的结构是:

display: flex

我想在collectionView中使用它们之前下载图像。 我如何下载图像(使用AlamofireImage)并将它们放在相关的carType图标属性中?

2 个答案:

答案 0 :(得分:2)

你问的是移动应用中真的很糟糕的做法。例如,一个案例,你提出了一个请求并且在一个数组中得到了20个项目,并且为了将所有UIImage放入你的模型中,你必须再发出20个请求,你甚至不需要知道你的用户最终是否会使用(查看)这些图标或不是。

相反,您可以在显示单元格(我猜,您将在单元格中显示这些图标)时显示图像,为此您可以使用SDWebImage等库(objective c)或者Kingfisher(swift),其中包含UIImageView的扩展名,可以轻松获取和显示图像。这些库也可以缓存下载的图像。

另外,对象映射的另一个建议。目前,您手动将json映射到模型。有很多好的库可以为你处理,可以自动化你的对象映射过程,例如 - ObjectMapper

希望,这很有帮助。祝你好运!

答案 1 :(得分:1)

我在UITableview中做了功能性的事情,在CellForRowIndex方法中添加了以下内容:

getDataFromUrl(urlString){(data,response,error) -> Void in
                    if error == nil {
                        // Convert the downloaded data in to a UIImage object
                        let image = UIImage(data: data!)
                        // Store the image in to our cache
                        if((image) != nil){
                            // Store the image in to our cache
                            self.imageCacheProfile[urlString] = image
                            // Update the cell
                            DispatchQueue.main.async(execute: {
                                cell.imgvwProfile?.image = image
                            })
                        }
                        else{
                            cell.imgvwProfile!.image = UIImage(named: "user")
                        }
                    }
                }

func getDataFromUrl(_ strUrl:String, completion: @escaping ((_ data: Data?, _ response: URLResponse?, _ error: NSError? ) -> Void)) {
    let url:URL = URL(string: strUrl)!
    let request = URLRequest(url: url)

    URLSession.shared.dataTask(with: request) {data, response, err in
        print("Entered the completionHandler")
        }.resume()

}

您还需要声明imageCache来存储下载的图像。

var imageCache = [String:UIImage]()

您可以在方法中使用上述代码,它应该可以正常工作。