有些时候我们要保存一个自定义类的实例,我们可以使用NSKeyedArchiver
来实现。要使用NSKeyedArchiver
保存,这个类必须实现NSCoding
协议。
自定义类
我们新建的一个自定义类如下(注意:自定义类必须继承自NSobject
,否则这个类的实例无法保存成功):
class Person: NSObject, NSCoding {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
// MARK: - NSCoding
required init?(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObject(forKey: "name") as! String
self.age = aDecoder.decodeInteger(forKey: "age")
super.init()
}
func encode(with aCoder: NSCoder) {
aCoder.encode(age, forKey: "age")
aCoder.encode(name, forKey: "name")
}
}
保存实例
// 获取保存路径
let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
let personPath = documentPath! + "/lebron.archive"
// 实例化一个Person
let lebron = Person(name: "lebron", age: 24)
// 保存数据
let success = NSKeyedArchiver.archiveRootObject(lebron, toFile: personPath)
if success {
print("保存成功")
}
// 读取数据
if let person = NSKeyedUnarchiver.unarchiveObject(withFile: personPath) as? Person {
print(person.name)
print(person.age)
}
Demo地址 >>
如果文中有错误,请指出!我们共同学习,共同进步。谢谢!
网友评论