2017-09-13 3 views
0

私はここに、しかし、私はそれが適切に協力してもらうカント、URLを持っているし、リターン機能を介して画像をダウンロードしたいが、私の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から返さたいですアラモファイアの応答。

しかし、私はreturn文のために空の関数で

予期しない非空の戻り値を取得します。

これを正しく行うにはどうすればよいですか?

+0

'return image'呼び出しがasynchroneなので、これは動作しません。代わりにクロージャーを使用してください。既に疑問がたくさんあります。「Swift + Closure + Async」を探してください。 " - > UIImage"と言ったからですが、 'if let image'のelseの場合は何も返しません。また、メソッドの最後には何も返さない。 – Larme

+0

リンクされた例はURLSession用ですが、まったく同じ考えです。メソッドのラッパーシグネチャにコールバックを追加し、取得する値とともに使用します(この例ではStringですが、何でも構いません)。 – Moritz

+0

@Moritz彼は明らかに** AlamofireImage **経由でUIImageをダウンロードしています**はhttps://stackoverflow.com/questions/31264172/how-can-i-get-the-data-from-nsurlsession-sharedsessionで重複してマークされません-datataskwithrequestは重複している可能性がありますが、この質問はあなたの著しい質問とは異なります! –

答えて

5

あなたは、画像をダウンロードするために、以下の機能を使用することができます:あなたはUIImageView使用の延長線上に画像を設定したい場合は

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

それとも

を使用します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

imはタブバーのアイコンで画像を使いたいと思っています。また、私はparamハンドラの引数が不足している – jackdm

+0

これは、私はあなたがimageViewに画像を設定したいと仮定しているので、代替です –

+0

どうして私はgetImageの最初の例を呼び出すのですか? 「ハンドラ」エラーで問題が発生しました – jackdm

関連する問題