繁体   English   中英

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

[英]How to save an array of Int64 variables using NSCoding in 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一起使用。 我该如何实现?

我不知道为什么它可以与Int一起使用,而不与Int64一起使用。 我该如何实现?

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

但是,Swift自动将Int 接到NSNumber,因此看起来可以正常工作。

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

在当前版本的Swift中,当您将[Int]转换为AnyObject (或AnyObject? )时,Swift会生成包含NSNumberNSArray 尽管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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM