从 NSUserDefaults 解包 NSMutableArray
Unwrapping NSMutableArray from NSUserDefaults
我正在尝试从用户默认值中解包 NSMutableArray,但一直收到错误 unexpectedly found nil while unwrapping an Optional value
。我试图在获取数组后检查 nil,但它发生在从 UserDefaults 获取数组的行上,所以我不知道如何修复此错误。有人可以帮忙吗?
var classURLs: NSMutableArray = NSMutableArray();
let defaults: NSUserDefaults = NSUserDefaults(suiteName: "group.myCompany.Array")!;
classURLs = NSMutableArray(object: defaults.objectForKey("Class URLs")!);
NSUserDefaults.objectForKey
returns 一个可选的是有原因的——如果密钥不存在,你会得到 nil
回来。你不应该用 !
强制解包
最常见的情况是,这是您第一次尝试阅读但从未写过它。
在这种情况下,您可能需要一个默认值,也许是一个空数组:
let classURLs = defaults.stringArrayForKey("Class URLs") as? [String] ?? []
(??
如果左边的值为nil
则用右边的值代替)
请注意,如果您编写 Swift 以使用 Swift 数组(例如 [String]
)而不是 NSMutableArray
,可能会更好,除非您是要做的是直接将其传递给对 Objective-C.
的调用
您还可以通过使用可选链接来避免 !
与 NSUserDefaults
init 一起使用:
let defaults = NSUserDefaults(suiteName: "group.myCompany.Array")
var classURLs = defaults?.stringArrayForKey("Class URLs") as? [String] ?? []
如果密钥不存在,nil
对象的强制解包(!
)将导致崩溃。你需要考虑这种情况。
var classURLs = NSMutableArray(object:
NSUserDefaults.standardUserDefaults().objectForKey("foo") ?? [])
注意:从 Objective-C 过渡?你不需要分号! ;-)
我正在尝试从用户默认值中解包 NSMutableArray,但一直收到错误 unexpectedly found nil while unwrapping an Optional value
。我试图在获取数组后检查 nil,但它发生在从 UserDefaults 获取数组的行上,所以我不知道如何修复此错误。有人可以帮忙吗?
var classURLs: NSMutableArray = NSMutableArray();
let defaults: NSUserDefaults = NSUserDefaults(suiteName: "group.myCompany.Array")!;
classURLs = NSMutableArray(object: defaults.objectForKey("Class URLs")!);
NSUserDefaults.objectForKey
returns 一个可选的是有原因的——如果密钥不存在,你会得到 nil
回来。你不应该用 !
最常见的情况是,这是您第一次尝试阅读但从未写过它。
在这种情况下,您可能需要一个默认值,也许是一个空数组:
let classURLs = defaults.stringArrayForKey("Class URLs") as? [String] ?? []
(??
如果左边的值为nil
则用右边的值代替)
请注意,如果您编写 Swift 以使用 Swift 数组(例如 [String]
)而不是 NSMutableArray
,可能会更好,除非您是要做的是直接将其传递给对 Objective-C.
您还可以通过使用可选链接来避免 !
与 NSUserDefaults
init 一起使用:
let defaults = NSUserDefaults(suiteName: "group.myCompany.Array")
var classURLs = defaults?.stringArrayForKey("Class URLs") as? [String] ?? []
如果密钥不存在,nil
对象的强制解包(!
)将导致崩溃。你需要考虑这种情况。
var classURLs = NSMutableArray(object:
NSUserDefaults.standardUserDefaults().objectForKey("foo") ?? [])
注意:从 Objective-C 过渡?你不需要分号! ;-)