2016-07-24 86 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

根據評論更新了我的回答。

您可以返回一個圖像佔位符,如果你正在尋找一個不可用:

所以你的方法如下所示:

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,如何在這種情況下執行if let? – 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