我这辈子都想不出如何在 NSCache 中存储与可选项有关的任何内容。我可以理解直接存储一个可选的是没有意义的,但是存储一个数组或字典,其中一些选项可能是可选的,这似乎应该是可能的。
然而,一个简单的例子不起作用:
let dict: [String: String?] = ["foo": "bar"]
NSCache().setObject(dict, forKey: "dict")
是否有什么我忽略了或者真的没有办法做到这一点?
最佳答案
答案是
let dict: [String: String?] = ["foo": "bar"]
NSCache().setObject(dict, forKey: "dict")
error: argument type '[String : String?]' does not conform to expected type 'AnyObject' NSCache().setObject(dict, forKey: "dict")
协议(protocol) AnyObject { ... } 所有类都隐式遵守的协议(protocol)。字典是一个结构体
class C {}
let cls: C = C()
NSCache().setObject(cls, forKey: "cls")
但是!!如果你的 cls 可以是 nil,那么你必须使用隐式解包可选。
let cls: C? = C()
NSCache().setObject(cls, forKey: "cls")
//error: value of optional type 'C?' not unwrapped; did you mean to use '!' or '?'?
NSCache().setObject(cls, forKey: "cls")
所以你必须使用
let cls: C! = C()
NSCache().setObject(cls, forKey: "cls")
Optional<Type>
也是一个结构体!
关于ios - 有没有办法在 NSCache 中存储一个可选数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34422496/