Swift - NSMutableArray 中的 NSKeyedUnarchiver unarchiveObjectWithData

Posted

技术标签:

【中文标题】Swift - NSMutableArray 中的 NSKeyedUnarchiver unarchiveObjectWithData【英文标题】:Swift - NSKeyedUnarchiver unarchiveObjectWithData in NSMutableArray 【发布时间】:2015-01-20 15:00:53 【问题描述】:
var objects: AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithData(data)

如何将对象变成 NSMutableArray ?我归档了 NSMutableArray。

【问题讨论】:

【参考方案1】:

只需将结果向下转换为NSMutableArray

if let objects = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? NSMutableArray 
    // ...
 else 
    // failed

如果归档对象是(不可变的)NSArray,那么您必须创建一个可变的 复制:

if let array = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? NSArray 
    let objects = NSMutableArray(array: array)
    // ...

【讨论】:

@BogdanBogdanov:奇怪,我测试过了。您确定归档对象是 mutable 数组吗?它适用于as? NSArray 吗? ops 不,它不是 NSMutableArray.. 抱歉我的错误它有效 :) 在我看来,投射到[AnyObject?] 会更“迅速”。我对将 NSMutableArray 设置为 let 时会发生什么感兴趣,因为您无法更改 let.. 因此将其设为 NSArray @DougMead:NSMutableArray 是一个引用类型。即使您使用let 分配它,您也可以修改引用的(可变)数组。它不会使它成为一个 NSArray。 这是有道理的。我想我将语法糖与实际分配 NSMutableArray 引用混淆了。我绝对记得看到 let 创建 NSArrays 和 var 快速创建 NSMutableArrays .. 我的假设是否正确?

以上是关于Swift - NSMutableArray 中的 NSKeyedUnarchiver unarchiveObjectWithData的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 8.3 和 Swift 3:在 UICollectionView 中的单元格中显示图像,从 URL 获取并存储在 NSMutableArray

如何将 NSMutableArray 转换为 Swift 数组?

在 Swift 中为 Objective C 函数提供 NSMutableArray 类型

Swift 3 UserDefaults 设置 NSMutableArray

swift Swift Strings的扩展函数,它将接受NSMutableArray参数

swift : 使用 NSPredicate 过滤 NSMutableDictionary 的 NSMutableArray