[英]How to save an array of Int64 variables using NSCoding in Swift
我目前正在使用NSCoding保存这样的Int变量数组:
var myArray = [Int]()
myArray = aDecoder.decodeObjectForKey("MyArray") as! [(Int)]
aCoder.encodeObject(myArray, forKey: "MyArray")
现在,我需要保存一个Int64变量数组。 我认为这很简单,所以我这样做了:
var myNewArray = [Int64]()
myNewArray = aDecoder.decodeObjectForKey("MyNewArray") as! [(Int64)]
aCoder.encodeObject(myNewArray, forKey: "MyNewArray")
但是,我在最后一行收到错误:无法将类型[Int64]的值转换为预期的参数类型'AnyObject?
我不知道为什么它可以与Int一起使用,而不与Int64一起使用。 我该如何实现?
我不知道为什么它可以与Int一起使用,而不与Int64一起使用。 我该如何实现?
它实际上也不适用于Int。 您必须具有一个Objective-C 对象数组,并且数字不是Objective-C中的对象。
但是,Swift自动将Int 桥接到NSNumber,因此看起来可以正常工作。
对于Int64,它不这样做。 您必须自己创建NSNumber对象。
在当前版本的Swift中,当您将[Int]
转换为AnyObject
(或AnyObject?
)时,Swift会生成包含NSNumber
的NSArray
。 尽管NSNumber
可以包含Int64
(在C / Objective-C中为long long int
),但是Swift不会自动将Int64
转换为NSNumber
,因此[Int64]
无法自动转换为AnyObject
。
您可以显式生成一个包含NSNumber
的NSArray
。
let myI64Array = aDecoder.decodeObjectForKey("MyNewArray") as! [NSNumber]
myNewArray = myI64Array.map{$0.longLongValue}
要么:
let myI64Array = myNewArray.map{NSNumber(longLong: $0)}
aCoder.encodeObject(myI64Array, forKey: "MyNewArray")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.