嘿,用最大公约数很容易解决...
只需构建一个类似于以下的类:
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中,您可以声明/初始化某些内容为lazy,这意味着它将在其类的init上声明,但它将在您首次尝试在代码中访问它之前短暂地进行初始化...这可能是任何时间,甚至从不:-)
或者将您的代码从此更改...
public lazy var theImage: UIImage = MyCalass.loadImage { (imageTest) -> Void in
return imageTest
}
将此...
var theImage: UIImage?
MyCalass.loadImage { (imageTest) -> Void in
theImage = imageTest
}
loadImage(_:)
没有返回值(即Void
,也称为()
); 您正在尝试将类型为UIImage
的懒加载属性分配给不返回图像的函数的返回值。 - mattt