我有以下测试代码:
func testSaveDictionary() { let userDefaults = NSUserDefaults.standardUserDefaults() var jo = [ "a" : "1.0", "b" : "2.0" ] let akey = "aKey" userDefaults.setObject(jo, forKey: akey) var isOk = userDefaults.synchronize() var data0 = userDefaults.dictionaryForKey(akey) println(data0) }
println(data0)的输出为nil。
我的代码有问题吗?Swift字典是现在还是最终版本中的属性列表?
Swift 2,Xcode 7 更新 : 如@atxe所示,NSUserDefaults词典现在映射为[String, AnyObject]。这是Objective-C“轻量级泛型”的结果,它允许将Objective-C方法声明为
[String, AnyObject]
- (NSDictionary<NSString *,id> *)dictionaryForKey:(NSString *)defaultName
(默认对象必须是属性列表,尤其是字典键只能是字符串。)
另一方面,如果可能的话,会自动桥接一个Swift字典,因此问题的原始代码可以再次使用:
let jo = [ "a" : "1.0", "b" : "2.0" ] let akey = "aKey" // Swift 2: userDefaults.setObject(jo, forKey: akey) // Swift 3: userDefaults.set(jo, forKey: akey)
Swift 1.2的 原始答案 : 用户默认设置可以存储NSDictionary对象。这些被映射为Swift [NSObject : AnyObject]:
NSDictionary
[NSObject : AnyObject]
var jo : [NSObject : AnyObject] = [ "a" : "1.0", "b" : "2.0" ] userDefaults.setObject(jo, forKey: akey) var isOk = userDefaults.synchronize()
并请注意,它dictionaryForKey()返回一个可选的,因此您应该使用一个可选的赋值进行检查:
dictionaryForKey()
if let data0 = userDefaults.dictionaryForKey(akey) { print(data0) } else { print("not set") } // Output: [b: 2.0, a: 1.0]