繁体   English   中英

在UserDefaults中存储Int64

[英]Storing Int64 in UserDefaults

我像这样定义我的字典:

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'

用户默认对象只能是NSDataNSStringNSNumberNSDateNSArrayNSDictionary的实例(或实例组合)。

一些Swift类型自动桥接到Foundation类型,例如IntUIntFloatDoubleBool桥接到NSNumber 所以这可以保存在用户默认值中:

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

在64位体系结构中, Int 64位整数,但在32位体系结构中, Int是32位整数。

固定大小的整数类型(如Int64 不会自动桥接到NSNumber 对于NSMutableArray,Swift - Cast Int64到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)]

对于Swift 3,Martin的答案不再正确,因为set函数现在是Any?类型的Any? 而不是AnyObject?

您可以在UserDefaults中存储Int64,如下所示:

import Foundation
let value: Int64 = 1000000000000000
UserDefaults.standard.set(value, forKey: "key")
if let value2 = UserDefaults.standard.object(forKey: "key") as? Int64 {
    // value2 is an Int64 with a value of 1000000000000000
    print(value2)
}

您可以将上面的代码粘贴到Swift游乐场中并尝试自己。

斯威夫特4:

您可以在UserDefaults中将int64保存为字符串

let value: Int64 = 1000000000000000
let stringValue = String(value)
UserDefaults.standard.set(stringValue, forKey: "int64String")

就像你避免Int截断一样。

然后你可以恢复原始值:

let int64String = UserDefaults.standard.string(forKey: "int64String")
let originalValue = Int64(int64String!)

这允许您将其与其他int64值进行比较

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM