一尘不染

在UserDefaults中存储Int64

swift

我这样定义字典:

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'

阅读 340

收藏
2020-07-07

共1个答案

一尘不染

用户默认对象只能是的一个实例(或实例的组合)
NSDataNSStringNSNumberNSDateNSArray,或NSDictionary

有些斯威夫特类型自动桥接基金类型,例如IntUIntFloatDoubleBool彼此桥接NSNumber。因此,可以将其保存为用户默认设置:

var teamsData = Dictionary<String,Dictionary<String,Int>>()

在64位体系结构上,Int 64位整数,而在32位体系结构上,Int是32位整数。

的固定大小的整数类型,例如Int64 自动桥接NSNumber。在Swift-
将Int64强制转换为NSMutableArray的AnyObject中也观察到了这一点。因此,要在用户默认值中存储64位整数,必须NSNumber显式使用:

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)]
2020-07-07