2017-01-15 107 views
-1

我正在使用Alamofire從服務器獲取數據,然後將它們放入一個CarType對象的數組中,其中CarType是我的結構。我從服務器得到的是name,idiconUrl。從iconUrls我想下載圖標,並把它們放在icon。之後我將在集合視圖中使用iconname。我Alamofire的要求是:使用alamofire下載圖片 - iOS

var 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())) 
     } 

我的結構是:

import Foundation 
import UIKit 

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

我想的CollectionView使用它們之前下載的圖像。 如何下載圖像(使用AlamofireImage)並將它們放入相關的carType圖標屬性中?

回答

2

你在問什麼是移動應用程序中非常不好的做法。舉個例子,例如,您提出了一個請求,並獲得了一個數組中的20個項目,並且爲了將所有UIImage都放入模型中,您必須再提出20個請求,而且您甚至不知道您的用戶最終會使用(查看)這些圖標或不顯示。

相反,你可以取時,顯示(我猜,你會被顯示在單元格中的圖標)細胞的圖像,爲此,你可以使用庫像SDWebImageobjective c)或Kingfisher(SWIFT),其中有擴展名爲UIImageView,以便輕鬆獲取並顯示圖像。這些庫也可以緩存下載的圖像。

此外,對象映射的另一個建議。目前,您正在手動將json映射到您的模型。有很多好的庫可以爲你處理,例如可以自動化你的對象映射過程,例如 - ObjectMapper

希望,這很有幫助。祝你好運!

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]() 

你可以在你的方法中使用上面的代碼,它應該只是工作。