[英]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'
用户默认对象只能是NSData
, NSString
, NSNumber
, NSDate
, NSArray
或NSDictionary
的实例(或实例组合)。
一些Swift类型自动桥接到Foundation类型,例如Int
, UInt
, Float
, Double
和Bool
桥接到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.