ios - 有没有办法在 NSCache 中存储一个可选数组?

标签 ios swift cocoa-touch nscache

我这辈子都想不出如何在 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/

相关文章:

ios - 崩溃 : AES128 encryption in iOS 10 using Swift 2. 1

ios - 我有多个 Storyboard。如何使用 AppDelegate 在另一个 Storyboard中打开另一个 ViewController? (继续)

ios - 如何使菜单看起来像 QuizUp 中的菜单

ios - OpenGLES-2 支持 iPod Touch 3G 吗?

ios - Firebase 静默通知不会启动已关闭的 iOS 应用

ios - 如何将英语日期转换为阿拉伯语日期 ios swift

ios - 如何使用自定义数据初始化 View Controller ?

iphone - cellForRowAtIndexPath 中的崩溃

用于解压缩文件的 iOS native 类或库?

ios - XCode:放图片资源的地方