Эй людей его легко решить с НОДОМ ...
Просто построить класс вроде этого:
class AsynchImageLoader {
class func loadImageAsync (imageURL: NSURL, completionHandler: (downloadedImage: UIImage?) -> Void) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {() -> Void in
if let imageData: NSData = NSData(contentsOfURL: imageURL) {
if let imageImage: UIImage = UIImage(data: imageData) {
dispatch_async(dispatch_get_main_queue(), {() -> Void in
completionHandler(downloadedImage: imageImage)
})
} else {
dispatch_async(dispatch_get_main_queue(), {() -> Void in
completionHandler(downloadedImage: nil)
})
}
} else {
dispatch_async(dispatch_get_main_queue(), {() -> Void in
completionHandler(downloadedImage: nil)
})
}
})
}
}
И чем загружать изображения, как это ...
let imageView: UIImageView = UIImageView()
AsynchImageLoader.loadImageAsync(NSURL(string: "yourURL")!, completionHandler: { (downloadedImage) -> Void in
imageView.image = downloadedImage
})
downloadedImage может быть ноль, если что-то пошло не так ... иначе вы могли бы поставить его в ваш взгляд, или массив, или что угодно ...
Кстати ... Ленивый модификатор не означает, что изображение загружается «ленивым/асинхронным» ... В Swift вы можете объявить/инициализировать что-то как ленив, что означает, что он будет объявлен по инициативе его класса, но он будет сначала инициализирован незадолго до того, как вы сначала попытаетесь получить к нему доступ в коде ... Это может быть любое время или даже никогда :-)
Или изменить свой код от этого ...
public lazy var theImage: UIImage = MyCalass.loadImage { (imageTest) -> Void in
return imageTest
}
к этому ...
var theImage: UIImage?
MyCalass.loadImage { (imageTest) -> Void in
theImage = imageTest
}
'LoadImage (_ :)' не имеет возвращаемого значения (т.е. 'Void', a.k.a'() '); вы пытаетесь присвоить ленивое свойство типа 'UIImage' возвращаемому значению функции, которая не возвращает изображение. – mattt
Для асинхронной задачи, такой как запрос изображения, ленивые или вычисленные свойства не будут подходящим решением. – mattt
Довольно легко сделать вызов метода, я просто экспериментировал с ленивой загрузкой –