立即学习:https://edu.csdn.net/course/play/26947/347242?utm_source=blogtoedu
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//创建一个模型对象并对其进行归档和恢复归档操作
//初始化刚定义的对象模型
let user1 = UserModel()
//设置对象名称和密码属性值
user1.name = "Jerry"
user1.password = "123"
//添加异常捕捉语句,用来执行归档和恢复归档操作
do {
//创建一个可变二进制数据对象,用来存储归档后的模型对象。归档指的是将Swift对象存储为一个文件或网络上的一个数据块
let data = try NSKeyedArchiver.archivedData(withRootObject: user1, requiringSecureCoding: true)
//将归档的数据存储在程序包的Preference目录
UserDefaults.standard.set(data, forKey: "user1")
UserDefaults.standard.synchronize()
//对归档数据进行加载和恢复归档操作
//读取刚刚保存的数据
let dataFrom = UserDefaults.standard.data(forKey: "user1")
//恢复归档操作,恢复成内存中一个Swift对象
let savedUser = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(dataFrom!) as? UserModel
print(savedUser?.name ?? "")
print(savedUser?.password ?? "")
}
catch {
print("Archive error.")
}
// Do any additional setup after loading the view.
}
}
UserModel.swift
import Foundation
//创建基本对象模型
//创建一个继承自NSObject的类并遵循NSCoding协议。遵循该协议的类可以被序列化和反序列化。这样可以归档到磁盘上或分发到网络上
class UserModel: NSObject, NSCoding, NSSecureCoding {
//为对象模型添加姓名和密码两个属性
static var supportsSecureCoding: Bool = true
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() {
}
}