Search code examples
iosalamofirealamofireimage

download images using alamofire - iOS


I'm using Alamofire to fetch data from server and then put them in an array of CarType objects which CarType is my struct. what I get from server is name , id and iconUrl. from iconUrls i want to download icons and put them in icon. after that I'll use icon and name in a collection view. my Alamofire request is:

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

my struct is:

import Foundation
import UIKit

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

I want to download images before using them in collectionView. How can i download images (using AlamofireImage) and put them in related carType icon property?


Solution

  • What you are asking is really bad practice in mobile app. Just a case, for example, you made a request and got like 20 items in an array, and in order to put all UIImages in your models, you have to make 20 more requests, also you even don't know if your users will eventually use (view) those icons or no.

    Instead, you could fetch the images when the cell (I guess, you will be displaying those icons in a cell) is displayed, for this purpose you could use libs like SDWebImage(objective c) or Kingfisher(swift) which have extensions for UIImageView to make it simple to fetch and display image on. Those libs can also cache the downloaded image.

    Also, another suggestion for object mapping. Currently, you are mapping json to your model manually. There are a lot of good libs to handle that for you, which could automate your object mapping process, for example - ObjectMapper

    Hope, this was helpful. Good Luck!