Function does not wait until the data is downloaded

后端 未结 1 832
时光取名叫无心
时光取名叫无心 2020-12-07 01:23

I have the following function which downloads an image from server;

func getImageFromServerById(imageId: String) -> UIImage? {
    let url:String = \"htt         


        
1条回答
  •  感情败类
    2020-12-07 01:47

    The other answer is not a good replacement for the code you already had. A better way would be to continue using NSURLSession's data tasks to keep the download operation asynchronous and adding your own callback block to the method. You need to understand that the contents of the download task's block are not executed before you return from your method. Just look at where the call to resume() is for further evidence.

    Instead, I recommend something like this:

    func getImageFromServerById(imageId: String, completion: ((image: UIImage?) -> Void)) {
        let url:String = "https://dummyUrl.com/\(imageId).jpg"
    
        let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) {(data, response, error) in
            completion(image: UIImage(data: data))
        }
    
        task.resume()
    }
    

    Which can be called like this

    getImageFromServerById("some string") { image in
        dispatch_async(dispatch_get_main_queue()) {
            // go to something on the main thread with the image like setting to UIImageView
        }
    }
    

    0 讨论(0)
提交回复
热议问题