如何将NSKeyedUnarchiver.unarchiveTopLevelObjectWithData替换为适配[String]的unarchivedObject
适配[String]类型数组的NSKeyedUnarchiver替代方案
针对你遇到的unarchiveTopLevelObjectWithData在macOS 10.14+被弃用的警告,适配[String]类型数组的代码可以这样修改:
精准适配版本(推荐)
如果确认归档的数据是纯字符串数组,直接指定数组与字符串的OC对应类型即可:
do { let stringArray = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, NSString.self], from: data) as? [String] // 在这里使用解析得到的stringArray } catch { // 处理解归档失败的异常,比如数据损坏、类型不匹配等情况 }
简化写法
如果不需要处理错误,也可以用更简洁的形式:
let stringArray = try? NSKeyedUnarchiver.unarchivedObject(ofClass: NSArray.self, from: data) as? [String]
关键说明
- Swift的
String对应OC的NSString,所以解归档时需要在ofClasses中包含NSString.self,确保数组内的元素能被正确解析; - 若不确定归档数据的类型,保留
NSArray.self和NSString.self的组合即可稳定解析字符串数组; - 优先使用
do-catch捕获错误,比try?更便于排查解归档失败的具体原因。
内容的提问来源于stack exchange,提问作者atoss
相关产品推荐
相关产品推荐

