我一直在将我的项目迁移到 swift3,并一直在努力让 Alamofire RequestRetrier 协议正常工作。我遵循 Alamofire 4.0 迁移指南:https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#request-retrier https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#request-retrier
这是我正在尝试构建的课程:
import Foundation
import Alamofire
class RequestAccessTokenAdapter: RequestAdapter, RequestRetrier {
private let accessToken: String
init(accessToken: String) {
self.accessToken = accessToken
}
func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
var urlRequest = urlRequest
if (urlRequest.url?.absoluteString.hasPrefix(MyServer.serverUrl()))! {
urlRequest.setValue("Bearer " + accessToken, forHTTPHeaderField: "Authorization")
}
return urlRequest
}
func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) {
if let response = request.task?.response as? HTTPURLResponse, response.statusCode == 401 {
completion(true, 1.0) // retry after 1 second
} else {
completion(false, 0.0) // don't retry
}
}
}
构建失败并出现以下错误:类型“RequestAccessTokenAdapter”不符合协议“RequestRetrier”
我一直在尝试使用 Alamofire 4.2.0 和 AlamofireObjectMapper 4.0.1 以及 Alamofire 4.0.1 和 AlamofireObjectMapper 4.0.0,但我不断收到相同的错误。
如果我只使用 RequestAdapter 协议并删除应该功能,一切都会构建正常,但我似乎无法构建 RequestRetrier,而我的项目也需要它。
知道我的课堂上缺少什么吗?
EDIT:
我似乎遇到了命名空间问题,因为在 should-function 的定义中将 Error 替换为 Swift.Error 后代码构建成功:
func should(_ manager: SessionManager, retry request: Request, with error: Swift.Error, completion: @escaping RequestRetryCompletion) {