Ios 如何在Swift中使用NSCoding保存Int64变量数组
我目前正在使用NSCoding保存Int变量数组,如下所示:Ios 如何在Swift中使用NSCoding保存Int64变量数组,ios,arrays,swift,Ios,Arrays,Swift,我目前正在使用NSCoding保存Int变量数组,如下所示: var myArray = [Int]() myArray = aDecoder.decodeObjectForKey("MyArray") as! [(Int)] aCoder.encodeObject(myArray, forKey: "MyArray") 我现在需要保存一个Int64变量数组。我认为这很简单,所以我做了这个: var myNewArray = [Int64]() myNewArray = aDecoder
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对象
我不明白为什么它可以与Int一起工作,而不能与Int64一起工作。我怎样才能做到这一点
它实际上也不适用于Int。您必须有一个Objective-C对象数组,并且数字不是Objective-C中的对象
但是,Swift会自动将Int桥接到NSNumber,因此看起来它可以正常工作
对于Int64,它不这样做。您必须自己创建NSNumber对象。在当前版本的Swift中,当您将
[Int]
转换为任何对象
(或任何对象?
)时,Swift生成包含NSNumber
的NSArray
。虽然NSNumber
可以包含Int64
(C/Objective-C中的long-long-int
),但Swift不会自动将Int64
转换为NSNumber
,因此,[Int64]
不能自动转换为任何对象
您可以生成一个包含NSNumber
的NSArray
let myI64Array = aDecoder.decodeObjectForKey("MyNewArray") as! [NSNumber]
myNewArray = myI64Array.map{$0.longLongValue}
或:
在当前版本的Swift中,当您将[Int]
转换为AnyObject
(或AnyObject?
)时,Swift生成包含NSNumber
的NSArray
。虽然NSNumber
可以包含Int64
(C/Objective-C中的long-long-int
),但Swift不会自动将Int64
转换为NSNumber
,因此,[Int64]
不能自动转换为任何对象
您可以生成一个包含NSNumber
的NSArray
let myI64Array = aDecoder.decodeObjectForKey("MyNewArray") as! [NSNumber]
myNewArray = myI64Array.map{$0.longLongValue}
或:
看一看可能的解决办法。看一看可能的解决办法。