Last active
February 3, 2018 06:22
-
-
Save codelynx/29b2c2a36d290cec58a009ef712f33b0 to your computer and use it in GitHub Desktop.
Make NSCache more generics with Swift.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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