【发布时间】:2016-11-30 15:39:18
【问题描述】:
我对 iOS 比较陌生,如果在使用扩展程序来帮助管理下载和缓存时,我希望能帮助我弄清楚如何创建图像数组。我已经在这个圈子里转了几个小时,所以认为是时候利用智囊团了。
我创建了 UIImageView 的扩展,以便像这样下载和缓存图像:
let imageCache = NSCache()
extension UIImageView {
func loadImageUsingCacheWithURLString(url: NSURL) {
self.image = nil
// First check if there is an image in the cache
if let cachedImage = imageCache.objectForKey(url) as? UIImage {
self.image = cachedImage
return
}
else {
// Otherwise download image using the url location in Google Firebase
NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, response, error) in
if error != nil {
print(error)
}
else {
dispatch_async(dispatch_get_main_queue(), {
// Cache to image so it doesn't need to be reloaded every time the user scrolls and table cells are re-used.
if let downloadedImage = UIImage(data: data!) {
imageCache.setObject(downloadedImage, forKey: url)
self.image = downloadedImage
}
})
}
}).resume()
}
}
...所以它非常适合加载集合视图图像。但是,我还想捕获一组图像,这样我就可以将它传递给另一个视图控制器,而无需再次下载所有内容(浪费数据)。我创建了另一个函数来执行此操作,但 imageholder.image 始终为零。我不认为这是一个异步问题,因为此时所有图像都被缓存了,当我调试时,我永远无法让它不为零。
var imageHolder: UIImageView!
var imagesArray:[UIImage] = [UIImage]()
// Function to create images array to use on the photo view.
func createImagesArray() {
for url in imagesURLArray {
imageHolder.loadImageUsingCacheWithURLString(url)
if imageHolder.image != nil {
imagesArray.append(imageHolder.image!)
}
}
}
感觉好像我错过了一些简单的东西,但我被卡住了。谢谢!
【问题讨论】:
-
您只需为此使用一个库。考虑github.com/Haneke/HanekeSwiftgithub.com/onevcat/Kingfisher等。
标签: ios swift caching firebase-storage swift-extensions