2016-07-19 1 views
1

У меня есть tableView с customCells, и мне нужно загружать изображения из REST API (доступ с помощью токена auth). Как Im a noob in swift Я столкнулся с некоторыми библиотеками, и кажется, что KingFisher или AlamofireImage хороши для асинхронной загрузки и кэширования изображений, полученных из вызова API.Как использовать библиотеку KingFisher или AlamofireImage с токеном auth?

Но поскольку у моего API есть токен доступа, как это можно передать в этот запрос?

//image handling with kingfisher 
    if let imgView = cell.schoolCoverImage { 
     imgView.kf_setImageWithURL(
      NSURL(string: "")!, 
      placeholderImage: nil, 
      optionsInfo: nil, 
      progressBlock: nil, 
      completionHandler: { (image, error, CacheType, imageURL) ->() in 
       self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) } 
     ) 
    } 

Например, в Alamofire есть заголовки полей, где маркер доступа могут быть переданы

//Sample API call with Alamofire 
    Alamofire.request(
     .GET, 
     baseURL+schools+nonAcademicParameter, 
     headers: accessToken 
     ) 
     .responseJSON { response in 
      switch response.result { 
      case .Success(let value): 
       completionHandler(value, nil) 
      case .Failure(let error): 
       completionHandler(nil, error) 
      } 
    } 

Но с AlamofireImage заголовки полей, похоже, не будет доступна

//Image request with AlamofireImage 
Alamofire.request(
     .GET, 
     "https://httpbin.org/image/png"), 
    headers: ["Authorization" : "Bearer fbzi5u0f5kyajdcxrlnhl3zwl1t2wqaor"] //not available 
     .responseImage { response in 
      debugPrint(response) 

      print(response.request) 
      print(response.response) 
      debugPrint(response.result) 

      if let image = response.result.value { 
       print("image downloaded: \(image)") 
      } 
    } 

ответ

0

я понял что в конечном итоге

создать следующее в viewdidload()

//create custom session with auth header 
     let sessionConfig = 
NSURLSessionConfiguration.defaultSessionConfiguration() 
     let xHTTPAdditionalHeaders: [String : String] = 
self.restApi.accessToken 
     sessionConfig.HTTPAdditionalHeaders = xHTTPAdditionalHeaders 

     self.imageDownloader = ImageDownloader(
      configuration: sessionConfig, 
      downloadPrioritization: .FIFO, 
      maximumActiveDownloads: 4, 
      imageCache: AutoPurgingImageCache() 
     ) 

использовать его в cellforrowatindexpath:

let URLRequest = NSURLRequest(URL: NSURL(string: "https:/xxx.com/olweb/api/v1/schools/"+schoolIdString+"/image/"+ImageNameString)!) 

    self.imageDownloader.downloadImage(URLRequest: URLRequest) { response in 
     print(response.request) 
     print(response.response) 
     debugPrint(response.result) 

     if let image = response.result.value { 
      print("here comes the printed image:: ") 
      print(image) 
      print(schoolIdString) 
      cell.schoolCoverImage.image = image 
      cell.schoolBiggerImage.image = image 
     } else { 
      print("image not downloaded") 
     } 
    } 
2

Вы можете просто использовать модификатор запроса и передать его в качестве опции метода настройки изображения зимородка. Как это:

let modifier = AnyModifier { request in 
    var r = request 
    r.setValue("Bearer fbzi5u0f5kyajdcxrlnhl3zwl1t2wqaor", forHTTPHeaderField: "Authorization") 
    return r 
}  
imageView.kf.setImage(with: url, placeholder: nil, options: [.requestModifier(modifier)]) 

Смотрите wiki page зимородок больше.

Смежные вопросы