Codable

406 阅读1分钟

Codable语法介绍

Codable嵌套

截屏2021-03-16 上午10.53.58.png

数组

当json里嵌套有数组时不需要过多的修改,只需修改PersonInfo即可

截屏2021-03-16 上午10.43.38.png 截屏2021-03-16 上午10.52.33.png 当json里全是数组时

截屏2021-03-16 上午10.56.14.png

当json数据中有Optional value

截屏2021-03-16 上午11.05.21.png只需要把Person中的name改成可选值

截屏2021-03-16 上午11.08.38.png

截屏2021-03-16 上午11.07.35.png

元祖

截屏2021-03-16 上午11.20.57.png

继承

截屏2021-03-16 下午2.31.04.png

协议

截屏2021-03-16 下午2.41.03.png

Codable详解

解码

截屏2021-03-16 下午2.43.05.png从上图已知Codable是Decodable和Encodable两者的集合

Decodable

截屏2021-03-16 下午2.47.28.pngDecodable也只有一个init方法,方法中也只需要传入一个Decoder

Decoder

截屏2021-03-16 下午2.50.02.pngDecoder是提供如何解码数据的协议

JSONDecoder

上面的所有案例中都是通过JSONDecoder来设置解析格式的,先来看下JSONDecoder

截屏2021-03-16 下午4.19.41.png这里主要看

open func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable

找到decode的源码查看 截屏2021-03-16 下午10.06.31.png大致的解码过程可以像这样一张图

截屏2021-03-16 下午10.22.39.png 查看下面代码的sil文件

截屏2021-03-16 下午10.31.02.png

截屏2021-03-17 上午10.08.14.png

__JSONDecoder

已知JSONDecoder会创建一个__JSONDecoder实力对象来参与解码,查看__JSONDecoder的源码

截屏2021-03-17 下午10.29.09.png

unbox

__JSONDecoder调用unbox来解析数据

截屏2021-03-17 下午10.38.19.png

解析过程 mm.jpg

编码

编码是解码的逆过程 codeble2.jpg 但有一个问题如下图

截屏2021-03-18 下午3.05.02.pngTeacher继承自Person,下面也给Teacher的实例对象的subjectname进行赋值,但下面打印却没有打印出来

截屏2021-03-18 下午4.13.29.png