2017-09-13 96 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