我这样定义字典:
var teamsData = Dictionary<String,Dictionary<String,Int64>>()
然后,我试图将其存储在userdefaults中:
NSUserDefaults.standardUserDefaults().setObject(teamsData, forKey: "teamsData")
但它抛出错误:
Type Dictionary<String,Dictionary<String,Int64>> does not conform to protocol 'Any Object'
用户默认对象只能是的一个实例(或实例的组合) NSData,NSString,NSNumber,NSDate,NSArray,或NSDictionary。
NSData
NSString
NSNumber
NSDate
NSArray
NSDictionary
有些斯威夫特类型自动桥接基金类型,例如Int,UInt,Float,Double和Bool彼此桥接NSNumber。因此,可以将其保存为用户默认设置:
Int
UInt
Float
Double
Bool
var teamsData = Dictionary<String,Dictionary<String,Int>>()
在64位体系结构上,Int 是 64位整数,而在32位体系结构上,Int是32位整数。
的固定大小的整数类型,例如Int64是 不 自动桥接NSNumber。在Swift- 将Int64强制转换为NSMutableArray的AnyObject中也观察到了这一点。因此,要在用户默认值中存储64位整数,必须NSNumber显式使用:
Int64
var teamsData = Dictionary<String,Dictionary<String,NSNumber>>() // Example how to add a 64-bit value: let value : UInt64 = 123 teamsData["foo"] = ["bar" : NSNumber(unsignedLongLong: value)]