Skip to content

Instantly share code, notes, and snippets.

@codelynx
Last active February 3, 2018 06:22
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codelynx/29b2c2a36d290cec58a009ef712f33b0 to your computer and use it in GitHub Desktop.
Save codelynx/29b2c2a36d290cec58a009ef712f33b0 to your computer and use it in GitHub Desktop.
Make NSCache more generics with Swift.
import Foundation
class ZCache<T: AnyObject> {
private var cache = NSCache()
var delegate: NSCacheDelegate? {
get { return self.delegate }
set { self.cache.delegate = newValue }
}
var name: String {
get { return self.cache.name }
set { self.cache.name = newValue }
}
func objectForKey(key: AnyObject) -> T? {
return self.cache.objectForKey(key) as? T
}
func setObject(obj: T, forKey key: AnyObject) {
self.cache.setObject(obj, forKey: key)
}
func setObject(obj: T, forKey key: AnyObject, cost g: Int) {
self.cache.setObject(obj, forKey: key, cost: g)
}
func removeObjectForKey(key: AnyObject) {
self.cache.removeObjectForKey(key)
}
func removeAllObjects() {
self.cache.removeAllObjects()
}
var totalCostLimit: Int {
get { return self.cache.totalCostLimit }
set { self.cache.totalCostLimit = newValue }
}
var countLimit: Int {
get { return self.cache.countLimit }
set { self.cache.countLimit = newValue }
}
var evictsObjectsWithDiscardedContent: Bool {
get { return self.cache.evictsObjectsWithDiscardedContent }
set { self.evictsObjectsWithDiscardedContent = newValue }
}
// MARK: -
subscript(key: AnyObject) -> T? {
get { return self.cache.objectForKey(key) as? T }
set {
if let newValue = newValue {
self.cache.setObject(newValue, forKey: key)
}
else {
self.cache.removeObjectForKey(key)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment