Ответ 1
Другой ответ не является хорошей заменой для кода, который у вас уже был. Лучшим способом было бы продолжить работу с задачами данных NSURLSession, чтобы операция загрузки была асинхронной и добавила свой собственный блок обратного вызова к методу. Вам нужно понять, что содержимое блока задач загрузки не выполняется до того, как вы вернетесь из своего метода. Просто посмотрите, где вызов возобновить() для дальнейших доказательств.
Вместо этого я рекомендую что-то вроде этого:
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()
}
Что можно назвать так:
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
}
}