我们先看看使用归档和解档需要遵守的几个条件
条件:
- 归档解档存储的对象必须是class,而不是结构体。使用结构体可以用协议方法去实现,请有意者自行查资料。
- 该class需要继承NSObject,才可以使用KVC的方法,通过key拿到值或者通过key赋值。这是一个牺牲,不想继承的使用UserDafult方法去存储,毕竟Swift里面少点oc东西好
- 如果想通过运行时一次获得所有属性列表,更方便的进行归档和解档里面的kvc操作,需要在类前面加上@objcMembers修饰符
- 如@objcMembers class UserAccount :NSObject,NSCoding,Codable{…}这样去声明一个类。
###所谓运行时获取属性,就是能一次性拿到该类的所有属性名字(他们都被存储在该对象isa指针指向的objc_class)里面,是里面的一个数组。
下面看获得属性列表的方法
func getPropertyNameList() -> [String] {
var count : UInt32 = 0
var names : [String] = []
let properties = class_copyPropertyList(type(of: self), &count)
guard let propertyList = properties else {
return []
}
for i in 0..<count{
let property = propertyList[Int(i)]