从苹果公开的public文件内,我们能看到Codable 其实是Decodable和Encodable两个协议的总和.遵从Codable协议就需要遵从这两个协议内声明的方法
Decodable内声明的init(from)方法来实现解析并实例化,
Encodable对应的encode(to encoder: Encoder)来实现归档.
举例:结构体和Json 数据的相互转换
结构体要遵守Codable 协议
结构体-> json 数据 使用JSEncoder
json 数据转化为结构体,使用JSDecoder
Codable 可以将网络数据解析为自定义模型:
从苹果公开的public文件内,我们能看到Codable 其实是Decodable和Encodable两个协议的总和.遵从Codable协议就需要遵从这两个协议内声明的方法.Decodable内声明的init(from)方法来实现解析并实例化,Encodable对应的encode(to encoder: Encoder)来实现归档。
如何使用Codable?
以结构体为模型数据为例:
首先定义的结构体要遵守Codable协议:
如果你的部分参数和后台字段不一致,需要定义CodingKeys枚举,并且遵守String 和CodingKey协议,注意,书写这个枚举是为了修正和后台字段不一致的情况,一旦写了这个枚举,所有需要自动解析的字段你都需要写进来,因为自动解析需要这个枚举;反之如果不需要修正,就不要写这个枚举。
然后你就可以将网络数据转换为你的目标类型模型:
创建JSONDecoder变量,然后调用decode方法转换即可
如果你把类作为数据模型,如果数据模型B继承于A,则需要做一些处理
像下面就会出现问题,你只能解析子类中的属性,父类中无法拿到
这里需要手动对父类的属性进行赋值,同时还必须声明CodingKeys枚举