我一生都无法弄清楚如何在 NSCache 中存储与可选选项有关的任何内容。我可以理解直接存储一个可选的没有意义,但是存储一个数组或字典,其中一些选项可能是可选的,这似乎应该是可能的。
然而,一个简单的例子不起作用:
let dict: [String: String?] = ["foo": "bar"]
NSCache().setObject(dict, forKey: "dict")
有什么我忽略的东西还是真的没有办法做到这一点?
我一生都无法弄清楚如何在 NSCache 中存储与可选选项有关的任何内容。我可以理解直接存储一个可选的没有意义,但是存储一个数组或字典,其中一些选项可能是可选的,这似乎应该是可能的。
然而,一个简单的例子不起作用:
let dict: [String: String?] = ["foo": "bar"]
NSCache().setObject(dict, forKey: "dict")
有什么我忽略的东西还是真的没有办法做到这一点?
答案是
let dict: [String: String?] = ["foo": "bar"]
NSCache().setObject(dict, forKey: "dict")
错误:参数类型 '[String : String?]' 不符合预期的类型 'AnyObject' NSCache().setObject(dict, forKey: "dict")
protocol AnyObject { ... } 所有类都隐式遵循的协议。字典是一个结构
class C {}
let cls: C = C()
NSCache().setObject(cls, forKey: "cls")
但!!如果您的 cls 可以为零,那么您必须使用隐式展开可选。
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>
也是一个结构!