Swift 4 中的 Encoding 和 Decoding

Posted 二进制小镇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift 4 中的 Encoding 和 Decoding相关的知识,希望对你有一定的参考价值。

译者: Huminios

Swift 4 中的 Encoding 和 Decoding

简评:Swift 4 研究了吗?Swift 给我们带来了 Codable 协议,让对象转 JSON Data 变得如此的简单

Swift 4 中的 Encoding 和 Decoding

有许多不同的场景,您希望将您的 Class 换为数据。 一个非常常见的需求是 HTTP POST 请求的时候 JSON 数据作为 HTTP Body。 最常见的方法之一如下所示:

Swift 4 中的 Encoding 和 Decoding

JSONSerialization class 负责返回 Data 对象,从而作为 HTTP 的请求体。

JSONEncoder and JSONDecoder in Swift 4

Swift 4 有两个类 JSONEncoder 和 JSONDecoder ,可以方便地用于对象和 JSON 之间进行转化:

Swift 4 中的 Encoding 和 Decoding

typealias Codable = Decodable & Encodable

使用 Codable 协议指明 Language struct 可被编码和解码,然后使用 JSONEncoder 类的 encode 方法进行编码。

我们再看看下面这段代码,可以发现单纯的编码解码变得非常的简洁。

Swift 4 中的 Encoding 和 Decoding

很简单吧! 我们甚至可以通过使用协议和扩展来使其更简单。 我们创建一个自定义的可序列化协议来执行编码。

Serializable

但是这样还是需要创建 JSONEncoder 和 JSONDecoder 来为我们处理编解码,我们可以使用 协议和扩展来简化这些操作,举个例子。

Swift 4 中的 Encoding 和 Decoding

为了不让每个遵从 Serializable 的 class/struct 都是实现这个方法,扩展这个协议方法。

Swift 4 中的 Encoding 和 Decoding

上面这段代码,会报如下错误:

Playground execution failed: error: MyPlayground.playground:8:36: error: argument type ‘Self’ does not conform to expected type ‘Encodable’
return try? encoder.encode(self)

因为 Serializable 还不是 Codable ,所以还需要做些修改

Swift 4 中的 Encoding 和 Decoding

现在,您可以使用自建的协议轻松地对您的模型进行编码,如下所示:

Swift 4 中的 Encoding 和 Decoding

注意:把 Language 从 “Codable” 换成 “Serializable” 协议。

很舒服!!


原文:Encoding and Decoding in Swift 4


尊重作者,转发技术圈

Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding

Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding Swift 4 中的 Encoding 和 Decoding

Swift 4 中的 Encoding 和 Decoding

有意思啊

还要错过关注我?

长按二维码

关注的不仅仅是技术



以上是关于Swift 4 中的 Encoding 和 Decoding的主要内容,如果未能解决你的问题,请参考以下文章

Swift:无法使用String加载文件(contentsOfFile:encoding :)

USACO[19-20]Dec银组题解

Swift 4 中的私有和文件私有有啥区别

汇编中的inc和dec

String.Encoding 没有在 swift 3 中转换为 NSStringEncoding 到目标 C 转换

无法在 Swift 中的函数中返回值 [重复]