用 Codable 协议实现快速 JSON 解析

refer: https://swiftcafe.io/post/codable

本文的大体意思:
Codable是一个能够快速解析JSON的协议。它本质上是两个Protocol的集合:Decodable&Encodable.
下面从一个例子作为切入点:

struct Person : Codable {

    var name: String
    var gender: String
    var age: Int

}

上面的代码块除了声明 Codable 之外,这个实体类并没有其他代码,只有几个属性声明。 如果我们需要把他的实例编码成 JSON 字符串,可以这样:

let person = Person(name: "swift", gender: "male", age: 24)

let encoder = JSONEncoder()
let data = try! encoder.encode(person)
let encodedString = String(data: data, encoding: .utf8)!
print(encodedString)   // 输出 {"name":"swift","age":24,"gender":"male"}

就像这样 我们就完成了对 person型数据的解码 解析成了我们想要的JSON字符串,就是最后输出的字典型字符串。

但是有的时候 我们不想解析此实例中的所有属性,而如果声明继承了 Codable 协议,这个实例中的所有属性都会被算作编码范围内。
如果你只想对一部分属性进行编解码,也是有办法的,可以在你的自定义类中声明一个 CodingKeys 枚举属性:

struct Person : Codable {

    var name: String
    var gender: String = ""
    var age: Int

    enum CodingKeys: String, CodingKey {

        case name
        case age

    }

}

还是之前的 Person 类,这次我们加入了 CodingKeys 属性,并且定义了两个枚举值 name 和 age,只有在 CodingKeys 中指定的属性名才会进行编码,如果我们再次对 Person 进行编码,得到的将会是这样的结果:
{“name”:“swift”,“age”:24}

posted @ 2020-06-27 21:35  EvanMeetTheWorld  阅读(28)  评论(0)    收藏  举报