在这种情况下,最好的选择是使用模板。这样,您可以保持类型安全,而不必强制向下转型。
class StructWrapper<T>: NSObject {
let value: T
init(_ _struct: T) {
self.value = _struct
}
}
Run Code Online (Sandbox Code Playgroud)
我会碰上“不”(没有解决方法)的机会。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?。无论如何,在与缓存进行对话时,您将不得不处理可选性。
| 归档时间: |
|
| 查看次数: |
1600 次 |
| 最近记录: |