Я использую API изображения Google, чтобы загрузить изображение, которое будет отображаться пользователю, код работает так:Swift: Загрузка и отображение изображения занимает в 5 раз больше, чем это должно
downloadImage { [weak self] image in
if let strongSelf = self {
if let image = image {
strongSelf.mainImage.image = image
}
}
}
}
func downloadImage(completion: UIImage? -> Void) {
let url = NSURL(string: "https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=anything")
let request = NSURLRequest(URL: url!)
NSURLConnection.sendAsynchronousRequest(request, queue: self.operationQueue) { [weak self] response, data, error in
if let strongSelf = self {
if error != nil || data == nil {
println(error)
completion(nil)
return
}
var serializationError: NSError?
if let go = NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments, error: &serializationError) as? [String: AnyObject] {
let responseData = go["responseData"] as [String:AnyObject]
let results = responseData["results"] as [[String:String]]
let firstObject = results[0]
var firstURL = firstObject["unescapedUrl"]!
let theurl = NSURL(string: firstURL)
let imageRequest = NSURLRequest(URL: theurl!)
NSURLConnection.sendAsynchronousRequest(imageRequest, queue: strongSelf.operationQueue) { response, data, error in
if error != nil || data == nil {
println(error)
completion(nil)
return
}
if let image = UIImage(data: data!) {
completion(image)
} else {
completion(nil)
}
}
} else {
println(serializationError)
completion(nil)
}
}
}
Этот в основном просто находит URL-адрес изображения, а затем загружает изображение и устанавливает на это изображение. Однако в большинстве случаев для отображения загруженного изображения требуется mainImage около 20 или 30 секунд, хотя я знаю, что изображение должно быть загружено гораздо быстрее, чем это (если я распечатаю url и найду его в своем браузере, он будет делать он через 3 или 4 секунды, то я буду терпеливо ждать, пока mainImage отобразит его в симуляторе). Также смешно, что если я сохраню url, переключитесь на контроллеры представлений и у нового контроллера просмотра есть переменная изображения, которая загружает изображение URL-адреса, она будет делать это прямо сейчас (например, открывать ее в моем браузере), в то время как главный контроллер представления все равно не загрузится.
что было - работает сейчас. – ZhouW