gpt4 book ai didi

ios - LRU 缓存的标准实现

转载 作者:IT王子 更新时间:2023-10-29 05:42:45 28 4
gpt4 key购买 nike

我正在使用 Swift 构建一个应用程序,我想在我的应用程序中使用 LRU 缓存。我实现了一个简单的 LRUCache<K: Hashable, V>在 Swift 中,但后来我发现,由于它已经附带了 Dictionary 和 Array 集合,我可能会缺少一个更好的 native 选项。

我检查了文档和其他问题,但找不到任何相关内容。

所以我的问题是:Swift 附带 LRUCache 吗?如果是,我该如何使用它,如果不是:我可以使用 ObjectiveC 版本并仍然保持我的 Swift 类型安全吗?

最佳答案

包装 NSCache(用于类型约束)并不是那么困难的工作。

struct LRUCache<K:AnyObject, V:AnyObject> {

private let _cache = NSCache()

var countLimit:Int {
get {
return _cache.countLimit
}
nonmutating set(countLimit) {
_cache.countLimit = countLimit
}
}
subscript(key:K!) -> V? {
get {
let obj:AnyObject? = _cache.objectForKey(key)
return obj as V?
}
nonmutating set(obj) {
if(obj == nil) {
_cache.removeObjectForKey(key)
}
else {
_cache.setObject(obj!, forKey: key)
}
}
}
}

let cache = LRUCache<NSString, NSString>()
cache.countLimit = 3
cache["key1"] = "val1"
cache["key2"] = "val2"
cache["key3"] = "val3"
cache["key4"] = "val4"
cache["key5"] = "val5"
let val3 = cache["key3"]
cache["key6"] = "val6"

println((
cache["key1"],
cache["key2"],
cache["key3"],
cache["key4"],
cache["key5"],
cache["key6"]
))

结果:

(nil, nil, Optional(val3), nil, Optional(val5), Optional(val6))

关于ios - LRU 缓存的标准实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25970415/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com