gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 12:41:40 24 4
gpt4 key购买 nike

我目前正在使用 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 的 NSArray。尽管 NSNumber 可以包含 Int64(C/Objective-C 中的 long long int),但 Swift 不会转换 Int64自动转换为NSNumber,因此,[Int64] 不能自动转换为AnyObject

您可以显式生成包含NSNumberNSArray

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com