Moya 库基本使用
忽略导入到项目步骤
- 新建一个
MyService.swift
文件 - 新建
MyService
枚举, 录入接口目标信息 ( 每个枚举就是一个接口名称 ) - 写下可能用到的信息作为枚举的一部分 ( 外部调用作为参数传进来 )
- 扩展
MyService
, 遵守TargetType
协议 - 实现 TargetType 协议 [ baseURL, path, method, task, simpleData, headers]
TargetType
协议所必须遵守的模板
1 | var baseURL: URL {} |
官方示例
1 | enum MyService { |
到这里接口信息就制定好了, 下面开始调用API, 请求服务器数据
Moya调用接口信息, 请求服务器数据
1 | MoyaProvider().request(<#T##target: _##_#>, completion: <#T##Completion##Completion##(Result<Response, MoyaError>) -> Void#>) |
You can see that the TargetType
protocol makes sure that each value of the enum translates into a full request. Each full request is split up into the baseURL
, the path
specifying the subpath of the request, the method
which defines the HTTP method and task
with options to specify parameters to be added to the request.
你可以看到TargetType 协议保证每个枚举值被转换成一个完整的请求, 每个完整的请求作为请求的详细介绍被拼接到 baseURL上去, method
定义了 HTTP 请求的方法, task
作为参数被可选的拼接到请求中去.
The TargetType
specifies both a base URL for the API and the sample data for each enum value. The sample data are Data
instances, and could represent JSON, images, text, whatever you’re expecting from that endpoint.
TargetType
综上所述即是 API 接口的基本 URL, 也是为每个枚举指定的模板样例数据. 样板数据也是返回的数据样例, 相当于就是你从 端点拿到的 JSON , 图片, 文本 等任何形式数据.
就是说每个请求的 URL 接口, 实现
TargetType
协议就足够了. sampleData 就是实际返回的数据的样例.
moya 请求
1 | provider.request(.zen) { result in |
The request
method is given a MyService
value (.zen
), which contains all the information necessary to create the Endpoint
– or to return a stubbed response during testing.
The Endpoint
instance is used to create a URLRequest
(the heavy lifting is done via Alamofire), and the request is sent (again - Alamofire). Once Alamofire gets a response (or fails to get a response), Moya will wrap the success or failure in a Result
enum. result
is either .success(Moya.Response)
or .failure(MoyaError)
.
请求方法是(.zen) , myService 结构体所给的值, (.zen)包含创建
Endpoint
所有的必要信息. – 或者是存根数据用于测试.
Endpoint
实例通常被用来创建一个URLRequest
( 重要后续请求由 Alamofire 发起), 一旦Alamofire
收到回复信息( 或者是错误的返回信息 ) ,Moya
将会抓起该数据 包装成 result 枚举, result 枚举表现为.success(Moya.Response) 或者是 .failure(MoyaError)
.
Result解读
.failure
.failure
表示服务器根本没有接收到请求 . ( 一般收到这个消息, 表示app当前网络有问题 )
收到这个错误消息, 你可以一段时间延迟之后立即重新发送链接请求, 或者检查网络, 等网络重新连接后发送.
.success
一旦你接收到了.success(response)
消息, 你就要去辨别状态码, 将 response 数据转换成 JSON.
有关解析 JOSN 看 Moya.Response