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

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

【问题讨论】:

    标签: ios swift nsmutablearray nskeyedunarchiver


    【解决方案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 .. 我的假设是否正确?
    猜你喜欢
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多