ios - 在 NSCache 中存储结构的任何方式

标签 ios swift object struct

有没有办法在 NSCache 中存储结构值?当我阅读苹果文档时,看起来你只能将 AnyObject 存储到它。有几个解决方法,一个是将 sturct 转换为类,第二个是将 sturct 值转换为字典,但如果数据集很大,它们是非常昂贵的操作。有什么建议吗?

最佳答案

我打算冒险拒绝(没有变通办法)。 NSCache 在运行时的 Objective-C 端完全结束,编写为与 NSObject 一起工作,通过 AnyObject 桥接。与 NSDictionaryNSArray 不同,没有编译器可以桥接的等效 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/

相关文章:

C++,实例化一个通用节点,使用模板存储一个对象的实例

javascript - 根据 2 个键的属性减少数组

ios - 像刷新一样重新加载 tableview View

iphone - 您如何在 iOS 中组织您的 UI 设计变量、对象等?

ios - 如何从 UIScrollView 获取 UIButton 位置

date - 如何在 Swift 中解析/创建格式为小数秒 UTC 时区(ISO 8601、RFC 3339)的日期时间戳?

iphone - Howe 捕获 UIView 顶部 UIView

ios - 应用程序中的 UINavigation 问题

ios - Swift:如何以最优雅的方式实现 api 响应验证?

python - djangoobjects.filterQ() 在一次查询中可以使用多少次?