Swift 4中的编码和解码

我知道我知道你一定像Swift 4 WTF! 不用担心,Swift 4尚未发布,但是您仍然可以使用Swift开发快照来体验Swift 4的功能。

如果您有兴趣安装Swift 4快照,请查看此链接。

有许多不同的方案,您要将类转换为数据表示形式。 一个非常普遍的需求是当您想将JSON数据作为HTTP正文发布时。 最常见的方法之一如下所示:

JSONSerialization类负责返回Data对象,然后可以将其作为HTTPBody传递给请求。

Swift 4中的JSONEncoder和JSONDecoder

Swift 4引入了JSONEncoder和JSONDecoder类,它们可以轻松地将对象转换为编码的JSON表示形式。 查看以下示例:

注意,使用了新的Codable协议,该协议使Language结构可编码和可解码。 更高版本的JSONEncoder类用于通过使用encode函数执行编码。

就像编码一样,解码也非常简单,如以下代码所示:

很简单吧! 通过使用协议和扩展,我们甚至可以使它更简单。 让我们创建一个自定义的Serializable协议,它将为我们执行编码。

可序列化

使用JSONEncoder和JSONDecoder很好,但是我们当然可以使它更无缝地执行编码和解码。 代替创建JSONEncoder的实例,类或结构应该能够自己编码。 看一下下面的Serializable协议,所有对编码感兴趣的模型都可以遵循该协议。

代替在每个类或结构中分别实现序列化功能,我们将使用协议扩展的功能来创建默认实现。

上面的代码将给您以下错误:

  游乐场执行失败:错误:MyPlayground.playground:8:36:错误:参数类型“ Self”与预期的类型“ Encodable”不符 
  返回尝试?  encoder.encode() 

问题在于“自我”不是可编码的。 我们可以通过使Serializable协议符合Codable协议来轻松解决此问题,如下所示:

现在,您可以使用新的Serializable协议轻松编码模型,如下所示:

确保您的语言模型符合“可序列化”协议而不是“可编码”协议。

我相信,在构建依赖于网络服务并发布编码数据的应用程序时,Swift 4中的这些新进步将真正使开发人员受益。

我可以担任高级iOS开发人员。 如果您有兴趣,请在此处查看我的简历。

如果您喜欢这篇文章,那么您可能会对我的课程“ iOS精益控制器的完整指南 ”感兴趣。 本课程涵盖许多有用的架构模式,以构建更好的iOS应用程序。 享受74%的折扣,请单击以下链接:

https://www.udemy.com/a-complete-guide-to-lean-controllers-in-ios/?couponCode=MAKEMELEAN