作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 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。我怎样才能做到这一点?
最佳答案
在当前版本的 Swift 中,当您将 [Int]
转换为 AnyObject
(或 AnyObject?
)时,Swift 会生成 包含
。尽管 NSNumber
的 NSArrayNSNumber
可以包含 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")
关于ios - 如何在 Swift 中使用 NSCoding 保存 Int64 变量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39308635/
我是一名优秀的程序员,十分优秀!