2016-07-24 5 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를 반환해야합니다. – 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