2017-09-13 99 views
0

我有一個網址,並希望通過復位功能下載圖像,但是,我不能得到正常的合作,這是我的FUNC:通過AlamofireImage下載UIImage?

func getTabImage(url: URL) -> UIImage { 
    Alamofire.request(url) 
     .responseImage { response in 
      if let image = response.result.value { 
       return image 
      } else { 
       print("Failed to get image") 
      } 
    } 
} 

我通過在URL,並且希望一個UIImage從返回alamofire的迴應。

但我得到空隙功能

爲return語句

意外的非空返回值。

我該如何正確實現?

+0

'return image'那不行,因爲這個調用是異步的。改爲使用閉包。已經有很多問題了,請查找「Swift + Closure + Async」。對於錯誤信息(一旦你做了關閉事件就應該消失),這是因爲你說過「 - > UIImage」,但是如果「if let image」沒有返回任何東西。此外,在該方法結束時,您也不會返回任何內容。 – Larme

+0

鏈接的例子是爲URLSession,但這是完全一樣的想法。給你的方法包裝器簽名添加一個回調,然後將它與值一起使用來檢索(例子中的字符串,但可以是任何)。 – Moritz

+0

@Moritz他明確要求**通過AlamofireImage下載UIImage **不會被標記爲重複https://stackoverflow.com/questions/31264172/how-can-i-get-the-data-from-nsurlsession-sharedsession -datataskwithrequest可能是重複的,但這個問題與你標記的問題不同! –

回答

5

你可以用下面這個函數用於下載圖片:

func getImage(_ url:String,handler: @escaping (UIImage?)->Void) { 
     print(url) 
     Alamofire.request(url, method: .get).responseImage { response in 
      if let data = response.result.value { 
       handler(data) 
      } else { 
       handler(nil) 
      } 
     } 
    } 

用途

getImage("http://") { (image) in 
    if image != nil { 
     print(image) 
    } 
} 

或者

如果你想設置UIImageView使用擴展的圖像AlamofireImage

if let imageURL = URL(string: "http://"), let placeholder = UIImage(named: "default") { 
    imageView.af_setImage(withURL: imageURL, placeholderImage: placeholder) //set image automatically when download compelete. 
} 
+0

即時通訊想要使用標籤欄圖標上的圖像。我也得到缺失參數爲參數處理程序太 – jackdm

+0

這是替代,因爲我假設你想在imageView –

+0

設置圖像謝謝那麼我如何調用getImage的第一個例子?因爲我有'處理程序'錯誤的問題 – jackdm