2017-01-15 5 views
-1

Alamofire를 사용하여 서버에서 데이터를 가져온 다음 CarType 개체의 배열에 넣습니다. CarType은 내 구조체입니다. 내가 서버로부터 얻는 것은 name, id 그리고 iconUrl이다. 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 개 이상의 요청을해야하며 사용자가 결국 아이콘을 사용하거나 볼 수 있습니다.

대신에, 당신은이이 목적을 위해 당신이 SDWebImage (objective c) 또는 Kingfisher (SWIFT) 같은 libs와 사용할 수, (내 생각, 당신은 셀에 그 아이콘이 표시됩니다) 셀이 표시되는 이미지를 가져올 수 UIImageView 확장을 사용하면 이미지를 가져와 표시하는 작업이 간단 해집니다. 이러한 라이브러리는 다운로드 한 이미지를 캐시 할 수도 있습니다.

또한 개체 매핑을위한 또 다른 제안입니다. 현재 json을 모델에 수동으로 매핑하고 있습니다. 예를 들어 객체 매핑 프로세스를 자동화 할 수있는 좋은 libs가 많이 있습니다. - ObjectMapper

희망이 있습니다. 행운을 빕니다!

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를 선언해야합니다

1

나는 jQuery과의 기능의 일을 한 CellForRowIndex 방법에 다음을 추가했다.

var imageCache = [String:UIImage]() 

위의 코드는 방법에 사용할 수 있으며 제대로 작동합니다.

관련 문제