在NSUserDefaults中使用可选值[String:AnyObject?]存储字典

Ste*_*vik 1 nsuserdefaults swift

我需要存储一个可以包含nil作为值的字典

var someOptionalVar: String? = nil

var dict: [String: AnyObject?] = [
    "someOptionalVar": self.someOptionalVar
]

defaults.setObject(dict, forKey: self.nsUserDefaultsKey)
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误

无法将'[String:AnyObject?]'类型的值转换为预期的参数类型'AnyObject?'

我知道我可以保留nil变量然后当我从NSUserDefaults解析字典时,我会将变量(对应于缺少的属性)设置为nil,但这不是我想要做的.

那么如何在NSUserDefaults中存储nil值?

Las*_*sse 6

使用NSNull()而不是nil,并声明字典仅包含非选项:

var someOptionalVar: String? = nil

var dict: [String: AnyObject] = [
    "someOptionalVar": self.someOptionalVar ?? NSNull()
]

defaults.setObject(dict, forKey: self.nsUserDefaultsKey)
Run Code Online (Sandbox Code Playgroud)

  • 你可以替换`(self.someOptionalVar!= nil)?self.someOptionalVar:NSNull()`与[nil coalescing operator](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/ TP40014097-CH6-ID72)`??`这样:`self.someOptionalVar ?? NSNull()` (4认同)