有没有办法在 NSCache 中存储结构值?当我阅读苹果文档时,看起来你只能将 AnyObject 存储到它。有几个解决方法,一个是将 sturct 转换为类,第二个是将 sturct 值转换为字典,但如果数据集很大,它们是非常昂贵的操作。有什么建议吗?
最佳答案
我打算冒险拒绝(没有变通办法)。 NSCache
在运行时的 Objective-C 端完全结束,编写为与 NSObject
一起工作,通过 AnyObject
桥接。与 NSDictionary
和 NSArray
不同,没有编译器可以桥接的等效 Swift 集合。
抛开实现要点:NSCache
根本不存在于一个理解比 C 原子更复杂的值语义的世界中。
也就是说,可能最简单的解决方法就是为您的结构创建一个对象容器,使桥接显式但由任何想要使用缓存的人拥有:
class YourStructHolder: NSObject {
let thing: YourStruct
init(thing: YourStruct) {
self.thing = thing
}
}
cache.setObject(YourStructHolder(thing: thing), forKey:"Whatever")
(cache.objectForKey("Whatever") as? YourStructHolder)?.thing
... 或者跳过 init
并使用 var ...: YourStruct?
如果您对可变性感到满意。无论如何,在与缓存对话时,您将不得不处理可选性。
关于ios - 在 NSCache 中存储结构的任何方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282502/