0

我一生都无法弄清楚如何在 NSCache 中存储与可选选项有关的任何内容。我可以理解直接存储一个可选的没有意义,但是存储一个数组或字典,其中一些选项可能是可选的,这似乎应该是可能的。

然而,一个简单的例子不起作用:

let dict: [String: String?] = ["foo": "bar"]
NSCache().setObject(dict, forKey: "dict")

有什么我忽略的东西还是真的没有办法做到这一点?

4

1 回答 1

1

答案是

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>也是一个结构!

于 2015-12-22T19:19:48.440 回答