swift 中使用Codable进行数据解析

从苹果公开的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枚举



你可能感兴趣的:(swift 中使用Codable进行数据解析)