Codable和NSCoding协议
Codable:
Swift 4中的一种可以将自身转换为外部表示形式的类型。即可以将数据编码为其他类型的数据,不限于存储于磁盘中的二进制格式。
Codable是Encodable和Decodable协议的类型别名。 当您使用Codable作为类型或泛型约束时,它匹配符合这两种协议的任何类型。
其中,
Decodable协议定义了函数:init(from decoder: Decoder) throws;参数decoder为从文件中读取数据。
Encodable协议定义了函数:func encode(to encoder: Encoder) throws;参数encoder为将数据写入新类型。如果该值无法编码任何内容,编码器将在其位置编码空键控容器。如果给定编码器格式的任何值无效,则此函数将引发错误。
NSCoding:
从object-C中继承的一种可以对对象进行编码和解码以进行存档和分发的协议。
NSCoding协议声明了类必须实现的两种方法,以便可以对该类的实例进行编码和解码。此功能为归档(对象和其他结构存储在磁盘上)和分发(将对象复制到不同的地址空间)提供了基础。
为了与面向对象的设计原则保持一致,被编码或解码的对象负责编码和解码其实例变量。编码器通过调用encode(with :)或init(coder :)来指示对象执行此操作。 encode(with :)指示对象将其实例变量编码为提供的编码器;对象可以多次接收此方法。 init(coder:)指示对象从提供的编码器中的数据初始化自身;因此,它取代了任何其他初始化方法,并且每个对象只发送一次。任何应该可编码的对象类必须采用NSCoding协议并实现其方法。
init?(coder aDecoder: NSCoder) 返回从给定的unarchiver中的数据初始化的对象。
func encode(with aCoder: NSCoder)使用给定的归档器对接收器进行编码。
以上两个函数都是遵循NSCoding协议的类必须定义的函数.