如何在Swift中使用NSCoding保存Int64变量数组

时间:2016-09-03 15:41:19

标签: 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.decodeObjectForKey("MyNewArray") as! [(Int64)]

aCoder.encodeObject(myNewArray, forKey: "MyNewArray")

但是我在最后一行收到错误:     无法将'[Int64]'类型的值转换为预期的参数类型'AnyObject?'

我很困惑为什么它适用于Int但不适用于Int64。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

  

我很困惑为什么它适用于Int但不适用于Int64。我怎样才能做到这一点?

它实际上也不适用于Int。您必须拥有一组Objective-C 对象,并且数字不是Objective-C中的对象。

但是,Swift 会自动将 Int桥接到NSNumber,因此看起来就像它一样。

对于Int64,它没有这样做。您必须自己创建NSNumber对象。

答案 1 :(得分:1)

在当前版本的Swift中,当您将[Int]转换为AnyObject(或AnyObject?)时,Swift会生成包含NSArray的{​​{1}}。虽然NSNumber可以在C / Objective-C中包含NSNumberInt64),但Swift不会自动将long long int转换为Int64,因此,{{1} }无法自动转换为NSNumber

您可以明确生成包含[Int64]的{​​{1}}。

AnyObject

或者:

NSArray