使用Alamofire 5和Codable在Swift 4中编写网络层:第2部分:使用Codable执行请求和解析

在上一部分中,我们为网络层创建了API路由器,实际上这是一个提供端点的enum 。 在这一部分中,我们将看到我们将如何使用Swift 4 Codable协议执行请求并解析JSON响应。

让我们开始定义数据模型并遵守Codable协议。

这是我们的User模型:

这是我们获取特定文章时的响应:

还要注意,在我们的Article模型中,我们使用的是自定义对象Category因此仅将Article声明为Codable是不够的,因为我们需要确保Article所有属性都符合Codable ,在这种情况下,标准库类型已经符合Codable但我们的自定义类型Category应符合Codable 。 这是Category模型的实现:

让我们向APIClient添加另一个请求。 让我们添加请求以获取文章列表。 我们的APIClient将如下所示:

我们在这里看到有两个参数queue和带有默认参数的decoder ,这就是为什么在我们的登录的第一个请求中,当我们调用responseDecodable ,我们刚刚传递了一个参数,即completionHandler 。 在我们的请求getArticles我们在调用responseDecodable时需要使用自定义JSONDecoder ,因为我们需要使用自定义格式来解析日期。 这提醒了JSON端点的JSON响应:

因此,为了帮助JSONDecoder知道如何解析日期,我们需要指定dateDecodingStrategy 。 我们首先需要创建一个DateFormatter

现在,我们有了可以与Alamofire 5和Codable一起使用的功能齐全的网络层。 但是让我们重构我们的APIClient并避免重复代码:

我们刚刚创建了一个名为performRequest的新方法,该方法将在传递APIRoutercompletion参数时执行请求。 同样,我们使传递自定义decoder成为可能。

现在,我们对APIClient感到满意,并且我们已经准备好使用完整的网络层。 这是完整的示例项目:

AladinWay /网络示例

NetworkingExample –系列文章的Exampel项目:https://medium.com/@AladinWay/write-a-networking-layer…

github.com

在本系列的下一部分中,我们将尝试改进APIClient并使用Future (有时也称为Promise )的概念,而不是我们现在使用的完成回调。 这将有助于更好地处理响应。

请随时发表评论并提出任何可能的改进,并请注意,我无法在“ Medium”上回答任何问题/评论。 相反,请在示例项目GitHub存储库中打开一个新问题:

AladinWay /网络示例

NetworkingExample –使用Alamofire 5和Codable在Swift 4中编写网络层

github.com

请继续关注,不要忘了在下一部分出版后立即得到通知。

您可以在此处阅读下一部分:

使用Alamofire 5和可编码部分在Swift 4中编写网络层:使用期货/承诺

在本系列的第一部分中,我们创建了网络层的API路由器,然后在第二部分中……

medium.com

感谢您的阅读。


您可以在Linkedin和Twitter上找到我