2016-07-24 7 views
3

バックエンドレスデータベースからURLから画像を取得しようとしています&これを画像に変換し、UIImageViewで関数を返します。このコードでNSErrorを処理してもUIImageViewを返すにはどうしたらいいですか?NSDataを処理してUIImage(Swift)を返す方法

func getImage() -> UIView { 

    let imageLink = backendless.userService.currentUser.getProperty("Avatar") 

    let URL = NSURL(string: imageLink as! String) 

    let data = NSData(contentsOfURL: URL!) 

    let image: UIImage! 

    image = UIImage(data: data!) 

    return UIImageView(image: image!) 
} 
+0

backendless呼び出しまたはNSDataの(contentsOfURL)のいずれかがインターネットに出かけ呼び出す場合、彼らは、同期すべきではないです。イメージをパラメータとして完了クロージャを実行するメソッドを記述する必要があります。 –

答えて

4

コメントに基づいて私の答えを更新しました。あなたが探している1が使用できない場合

プレースホルダ画像を返すことができます

をだからあなたの方法は、以下のようになります。ここでは

func getImage() -> UIImage { 

    var imageLink = backendless.userService.currentUser.getProperty("Avatar") 

    guard let imageUrl = imageLink as? String, 
     let URL = NSURL(string: imageUrl), 
     let data = NSData(contentsOfURL: URL) 
     else { 
      return UIImage(named: "placeholder") 
    } 

    return UIImage(data: data) 
} 

は、あなたがそれを使用する方法です。

func koloda(koloda: KolodaView, viewForCardAtIndex index: UInt) -> UIView { 
    return UIImageView(image: getImage()) 
} 
+0

imageViewを使用するメソッドは次のとおりです: 'func koloda(koloda:KolodaView、viewForCardAtIndex index:UInt) - > UIView {]' UIImageViewを返さなければなりません。 – Brandon

+0

アプリで何が動作する必要がありますか?イメージが利用できない場合、または何が表示されるべきかをプレースホルダに表示する必要がありますか? – fiks

+0

理想的には、プレースホルダはい。 – Brandon

1

URLから画像をダウンロードし、このコードでUIImageとして返すことができます。この情報がお役に立てば幸い:

func downloadImage(url: NSURL) -> UIImage { 

     getDataFromUrl(url) { (data, response, error) in 
      dispatch_async(dispatch_get_main_queue()) {() -> Void in 
       guard let data = data where error == nil else { return } 

       let image:UIImage = UIImage(data: data)! 

       return image 
      } 
     } 
    } 

更新:これはgetDataFromUrl機能

func getDataFromUrl(url:NSURL, completion: ((data: NSData?, response: NSURLResponse?, error: NSError?) -> Void)) { 
     NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in 
      completion(data: data, response: response, error: error) 
      }.resume() 
    } 
+0

getDataFromUrlはどこに定義されていますか? – Brandon

+0

申し訳ありませんが、私は忘れました。更新を確認してください。 – firats

関連する問題