2017-01-15 27 views
-1

Alamofireを使用してサーバからデータを取得し、CarTypeオブジェクトの配列に入れます。CarTypeは私の構造体です。私がサーバーから得たものはnameidiconUrlです。 from 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個のアイテムを1つの配列に入れたような場合、UIImageをすべてあなたのモデルに入れるためには、さらに20個のリクエストを行う必要があります。最終的にそれらのアイコンを使用(表示)します。セルが(私は推測、あなたがセルにこれらのアイコンが表示されます)が表示されている場合

代わりに、あなたはSDWebImageobjective c)または持ってKingfisher(SWIFT)のようなLIBSを使用することができ、この目的のために、画像を取得することができUIImageViewの拡張機能により、イメージをフェッチして表示するのが簡単になりました。これらのlibsは、ダウンロードしたイメージをキャッシュすることもできます。

また、オブジェクトマッピングの別の提案。現在、jsonをモデルに手動でマッピングしています。オブジェクトマッピングプロセスを自動化することができる良いlibsがたくさんあります。たとえば、次のようになります。ObjectMapper

がんばろう!

私はのUITableViewに機能することを行っている
1

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

あなたのメソッドで上記のコードを使用することができますし、ちょうどうまくいくはずです。

関連する問題