首先创建一个基本对象模型
添加一个快捷文件
import Foundation
//创建一个基本对象模型
//创建一个继承自NSObject的类,并遵守NSCoding协议,可以被序列化或者反序列化,这样可以归档到磁盘或者分发到网络上
class UserModel: NSObject,NSCoding{
// 为对象模型添加姓名和密码两个属性
var name:NSString!
var password:NSString!
// 添加一个协议方法,用来对模型对象进行序列化操作
func encode(with aCoder: NSCoder) {
// 对模型的姓名和密码属性进行编码操作,并设置对应的键名
aCoder.encode(self.name, forKey: "name")
aCoder.encode(self.password, forKey: "password")
}
// 添加另一个来自协议的方法,用来对模型对象进行反序列化操作
required init?(coder aDecoder: NSCoder) {
super.init()
// 对模型的姓名和属性,根据键名进行解码操作
self.name = aDecoder.decodeObject(forKey:"name") as! NSString
self.password = aDecoder.decodeObject(forKey:"password") as! NSString
}
// 重载父类初始化方法
override init() {
}
}
然后在Viewcontroller.swift文件中进行归档和恢复归档的操作
//使用归档的方法对模型对象进行持久化工作
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// 创建一个模型对象,并对其进行归档和恢复归档的操作
// 初始化刚才定义的对象模型
let user1 = UserModel()
// 设置名称,密码属性的值
user1.name = "Jerry"
user1.password = "123"
// 创建一个可变二进制数据对象,用来储存归档后的模型对象
let data = NSMutableData()
// 使数据对象,初始化一个键值归档对象
let archive = NSKeyedArchiver(forWritingWith: data)
// 对模型对象进行归档操作,(归档操作是指将swift对象,存储为一个文件或者网络上的一个数据块)
archive.encode(user1, forKey: "user1Key")
// 完成编码,即序列化工作
archive.finishEncoding()
// 初始化一个字符串对象,作为归档文件的存储路径
let filePath = NSHomeDirectory() + "/Documents/contacts.data"
// 将归档文件存储在程序包的指定位置
data.write(toFile: filePath, atomically: true)
// 对归档文件进行加载和恢复
// 读取刚刚保存的二进制文件
let fileData = NSMutableData(contentsOfFile: filePath)
// 然后对文件恢复归档,将文件或者来自网络的数据块恢复成swift对象
let unarchiver = NSKeyedUnarchiver(forReadingWith: fileData! as Data)
// 根据设置的键名对数据进行恢复归档操作,并获得其最终结果
let saveUser = unarchiver.decodeObject(forKey: "user1Key") as! UserModel
// 完成对象的解码操作
unarchiver.finishDecoding()
print(saveUser.name)
print(saveUser.password)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}