Codable语法介绍
Codable嵌套
数组
当json里嵌套有数组时不需要过多的修改,只需修改PersonInfo即可
当json里全是数组时
当json数据中有Optional value
只需要把Person中的name改成可选值
元祖
继承
协议
Codable详解
解码
从上图已知Codable是Decodable和Encodable两者的集合
Decodable
Decodable也只有一个init方法,方法中也只需要传入一个Decoder
Decoder
Decoder是提供如何解码数据的协议
JSONDecoder
上面的所有案例中都是通过JSONDecoder来设置解析格式的,先来看下JSONDecoder
这里主要看
open func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable
找到decode的源码查看
大致的解码过程可以像这样一张图
查看下面代码的sil文件
__JSONDecoder
已知JSONDecoder会创建一个__JSONDecoder实力对象来参与解码,查看__JSONDecoder的源码
unbox
__JSONDecoder调用unbox来解析数据
解析过程
编码
编码是解码的逆过程
但有一个问题如下图
Teacher继承自Person,下面也给Teacher的实例对象的subjectname进行赋值,但下面打印却没有打印出来