我有一个 api,其中用户角色可以过期,此时每个请求都将返回 410 错误代码。
我想要一个全局处理程序来重置一些数据,提示 UI 重置等
什么最适合挂接到 Alamofire? 目前我有一个
RequestInterceptor
并覆盖它的retry
我检查错误为
if let error = error as? AFError, case
.responseValidationFailed(.unacceptableStatusCode(410)) = error {
但是,
retry
被调用了两次,这对我的情况不利。
responseValidationFailed(reason: Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(code: 410))
responseValidationFailed(reason: Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(code: 410))
除了在“更高级别”上手动处理之外,我还可以使用其他钩子吗?拦截器似乎非常适合
最简单的方法是简单地挂接到您的响应处理程序或异步请求。在任何复杂性的任何 API 中,您都希望将您的 Alamofire 使用包装在一个方便的层中,该层配置您需要的内容。不管你怎么做,你都可以看到错误流过。
func request(..., completion: (AFDataResponse<T>) -> Void) {
session...
.responseDecodable(of: T.self) { response in
// Perform global behavior.
completion(response)
}
}
或
func request(...) async -> AFDataResponse<T> {
let response = await session...
.serializingDecodable(T.self)
// Global error handling
return response
}