任何将结构存储在NSCache中的方法

AAV*_*AAV 5 struct object ios swift

有什么方法可以在NSCache中存储结构值?当我阅读Apple文档时,您似乎只能将AnyObject存储到其中。围绕几个工作,一个是将sturct转换为类,第二是将sturct值转换为字典,但是如果数据集很大,它们的操作将非常昂贵。有什么建议吗?

Wil*_*ard 7

在这种情况下,最好的选择是使用模板。这样,您可以保持类型安全,而不必强制向下转型。

class StructWrapper<T>: NSObject {

    let value: T

    init(_ _struct: T) {
        self.value = _struct
    }
}
Run Code Online (Sandbox Code Playgroud)


Tom*_*mmy 6

我会碰上“不”(没有解决方法)的机会。NSCache在运行时的Objective-C方面令人震惊,被编写为与NSObjects一起使用,通过桥接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
Run Code Online (Sandbox Code Playgroud)

...或跳过,如果对可变性满意,请init使用a var ...: YourStruct?。无论如何,在与缓存进行对话时,您将不得不处理可选性。