我目前正在使用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。我怎样才能做到这一点?
答案 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中包含NSNumber
(Int64
),但Swift不会自动将long long int
转换为Int64
,因此,{{1} }无法自动转换为NSNumber
。
您可以明确生成包含[Int64]
的{{1}}。
AnyObject
或者:
NSArray