mirror of
https://github.com/Moya/Moya.git
synced 2026-03-18 19:52:28 +00:00
63 lines
2.6 KiB
Markdown
63 lines
2.6 KiB
Markdown
# 创建自定义的插件
|
|
|
|
作为构建一个自定义的插件的示例,假设我们想把网络活动通知给用户,那么当请求被发送时,我们将显示携有关于请求的基本信息的提示框,并且当一个响应表明这个请求失败时让用户知道 (对于这个例子,我们还需要假设我们不介意用大量的提示框来打扰用户)
|
|
|
|
首先,我们需要创建一个遵循 `PluginType`的类, 并且它接收一个视图控制器 (用来展示 `UIAlertController`)的实例对象的引用:
|
|
|
|
```swift
|
|
final class RequestAlertPlugin: PluginType {
|
|
|
|
private let viewController: UIViewController
|
|
|
|
init(viewController: UIViewController) {
|
|
self.viewController = viewController
|
|
}
|
|
|
|
func willSend(_ request: RequestType, target: TargetType) {
|
|
|
|
}
|
|
|
|
func didReceive(_ result: Result<Moya.Response, MoyaError>, target: TargetType) {
|
|
|
|
}
|
|
}
|
|
```
|
|
|
|
然后,当请求将被发送时,我们向函数添加一些功能:
|
|
|
|
```swift
|
|
func willSend(_ request: RequestType, target: TargetType) {
|
|
|
|
//make sure we have a URL string to display
|
|
guard let requestURLString = request.request?.url?.absoluteString else { return }
|
|
|
|
//create alert view controller with a single action
|
|
let alertViewController = UIAlertController(title: "Sending Request", message: requestURLString, preferredStyle: .alert)
|
|
alertViewController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
|
|
|
|
//and present using the view controller we created at initialization
|
|
viewController.present(viewControllerToPresent: alertViewController, animated: true)
|
|
}
|
|
```
|
|
|
|
最后, 如果结果出错了,让我们在 `didReceive` 中实现一个提示框
|
|
|
|
```swift
|
|
func didReceive(_ result: Result<Moya.Response, MoyaError>, target: TargetType) {
|
|
|
|
//only continue if result is a failure
|
|
guard case Result.failure(_) = result else { return }
|
|
|
|
//create alert view controller with a single action and messing displaying status code
|
|
let alertViewController = UIAlertController(title: "Error", message: "Request failed with status code: \(error.response?.statusCode ?? 0)", preferredStyle: .alert)
|
|
alertViewController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
|
|
|
|
//and present using the view controller we created at initialization
|
|
viewController.present(viewControllerToPresent: alertViewController, animated: true)
|
|
}
|
|
```
|
|
|
|
到此完毕, you now have very well informed, if slightly annoyed users.
|
|
|
|
_(Please note that this example will usually fail since presenting an alert twice on the same view controller is not allowed)_
|