使用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
的新方法,该方法将在传递APIRouter
和completion
参数时执行请求。 同样,我们使传递自定义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
感谢您的阅读。