Sea*_*ean 23 dictionary nsuserdefaults swift
我有以下测试代码:
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)
}
Run Code Online (Sandbox Code Playgroud)
println(data0)的输出为零.
我的代码有什么问题吗?Swift Dictionary是现在还是在最终版本中被认为是属性列表?
Mar*_*n R 31
更新Swift 2,Xcode 7:正如@atxe注意到的那样,NSUserDefaults词典现在被映射为[String, AnyObject].这是Objective-C"轻量级泛型"的结果,它允许将Objective-C方法声明为
- (NSDictionary<NSString *,id> *)dictionaryForKey:(NSString *)defaultName
Run Code Online (Sandbox Code Playgroud)
(默认对象必须是属性列表,特别是字典键只能是字符串.)
另一方面,如果可能的话,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)
Run Code Online (Sandbox Code Playgroud)
Swift 1.2的原始答案:
用户默认值可以存储NSDictionary对象.这些映射到Swift [NSObject : AnyObject]:
var jo : [NSObject : AnyObject] = [
"a" : "1.0",
"b" : "2.0"
]
userDefaults.setObject(jo, forKey: akey)
var isOk = userDefaults.synchronize()
Run Code Online (Sandbox Code Playgroud)
请注意,dictionaryForKey()返回一个可选项,因此您应该检查它,例如使用可选的赋值:
if let data0 = userDefaults.dictionaryForKey(akey) {
print(data0)
} else {
print("not set")
}
// Output: [b: 2.0, a: 1.0]
Run Code Online (Sandbox Code Playgroud)
Ant*_*ong 12
您需要将其转换为NSData第一个.像这样的东西:
var data = NSKeyedArchiver.archivedDataWithRootObject(jo)
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(data, forKey:akey)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23123 次 |
| 最近记录: |