如何使用NSKeyedUnarchiver解归档对象?弃用方法替代方案
替代弃用解归档方法的方案
当NSKeyedUnarchiver.unarchivedTopLevelObjectWithData()被弃用后,推荐使用类型安全的NSKeyedUnarchiver.unarchivedObject(ofClasses:from:)方法处理数组类型的解归档操作——因为你的归档根对象是[Person]数组,需要同时指定数组和元素的类。
具体解归档代码示例
// 解归档函数:传入归档后的Data,返回[Person]类型的可选值 func unarchivePeople(from data: Data) -> [Person]? { do { // 指定允许解归档的类集合:NSArray对应Swift的[Person],Person是数组元素类型 let unarchivedResult = try NSKeyedUnarchiver.unarchivedObject( ofClasses: [NSArray.self, Person.self], from: data ) // 将结果转换为Swift数组类型 return unarchivedResult as? [Person] } catch { print("解归档失败:\(error.localizedDescription)") return nil } }
关键说明
- 使用
ofClasses参数是因为归档根对象是数组,必须同时声明数组(NSArray.self)和数组内元素(Person.self)的类,确保解归档过程的类型安全。 - 相比弃用的方法,该方法会在解归档时验证类型,避免因类型不匹配导致的潜在崩溃。
如果需要解归档单个Person对象,可使用更简洁的unarchivedObject(ofClass:from:)方法:
func unarchiveSinglePerson(from data: Data) -> Person? { do { return try NSKeyedUnarchiver.unarchivedObject(ofClass: Person.self, from: data) } catch { print("解归档失败:\(error.localizedDescription)") return nil } }
内容的提问来源于stack exchange,提问作者Avii
相关产品推荐
相关产品推荐

