NSCache 为 UITableView 存储图像 Swift
NSCache to store images for UITableView In Swift
我是 swift 编程新手,我搜索了很多有关使用 Swift 使用 NSCache 存储图像的信息。
到目前为止我所做的是我得到了 id
s 和 imageName
s 与 JSON 并且我的数据在数组中并且我能够显示图像在细胞中没有问题。现在我想缓存图像。
这是我写的代码:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as TableViewCell
//cell.imageView
nameID = self.hoge[indexPath.row]["cars"]["carid"].string!
cell.nameLabel.text = nameID
if let imageFileURL = imageCache.objectForKey(self.hoge[indexPath.row]["cars"]["carid"].intValue) as? NSURL {
println("Get image from cache")
} else {
imageName = self.hoge[indexPath.row]["cars"]["pic_name"].string!
// If the image does not exist, we need to download it
var imgURL: NSURL = NSURL(string: "http://192.168.1.35/car/uploads/" + imageName )!
var image:UIImage = UIImage(named: "pen")!
// Download an NSData representation of the image at the URL
let request: NSURLRequest = NSURLRequest(URL: imgURL)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in
if error == nil {
image = UIImage(data: data)!
cell.viewCell.image = image
}
else {
println("Error: \(error.localizedDescription)")
}
})
}
return cell
}
那么,如何使用缓存存储和检索图像?
我建议你检查一下这个库HanekeSwift(它为 UIImage、NSData、JSON、String 或任何其他可以作为数据读取或写入的类型提供内存和 LRU 磁盘缓存), 至少了解他们是如何处理缓存的,你可以决定使用它还是创建你自己的解决方案。
使用非常easy/simple API:
// Setting a remote image
imageView.hnk_setImageFromURL(url)
// Setting an image manually. Requires you to provide a key.
imageView.hnk_setImage(image, key: key)
使用缓存
let cache = Shared.dataCache
cache.set(value: data, key: "image.png")
// Eventually...
cache.fetch(key: "image.png").onSuccess { data in
// Do something with data
}
我是 swift 编程新手,我搜索了很多有关使用 Swift 使用 NSCache 存储图像的信息。
到目前为止我所做的是我得到了 id
s 和 imageName
s 与 JSON 并且我的数据在数组中并且我能够显示图像在细胞中没有问题。现在我想缓存图像。
这是我写的代码:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as TableViewCell
//cell.imageView
nameID = self.hoge[indexPath.row]["cars"]["carid"].string!
cell.nameLabel.text = nameID
if let imageFileURL = imageCache.objectForKey(self.hoge[indexPath.row]["cars"]["carid"].intValue) as? NSURL {
println("Get image from cache")
} else {
imageName = self.hoge[indexPath.row]["cars"]["pic_name"].string!
// If the image does not exist, we need to download it
var imgURL: NSURL = NSURL(string: "http://192.168.1.35/car/uploads/" + imageName )!
var image:UIImage = UIImage(named: "pen")!
// Download an NSData representation of the image at the URL
let request: NSURLRequest = NSURLRequest(URL: imgURL)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in
if error == nil {
image = UIImage(data: data)!
cell.viewCell.image = image
}
else {
println("Error: \(error.localizedDescription)")
}
})
}
return cell
}
那么,如何使用缓存存储和检索图像?
我建议你检查一下这个库HanekeSwift(它为 UIImage、NSData、JSON、String 或任何其他可以作为数据读取或写入的类型提供内存和 LRU 磁盘缓存), 至少了解他们是如何处理缓存的,你可以决定使用它还是创建你自己的解决方案。
使用非常easy/simple API:
// Setting a remote image
imageView.hnk_setImageFromURL(url)
// Setting an image manually. Requires you to provide a key.
imageView.hnk_setImage(image, key: key)
使用缓存
let cache = Shared.dataCache
cache.set(value: data, key: "image.png")
// Eventually...
cache.fetch(key: "image.png").onSuccess { data in
// Do something with data
}