我一直在迁移我的项目到swift3并一直在争取让Alamofire RequestRetrier协议工作。我按照Alamofire 4.0迁移指南: https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#request-retrier类不符合协议RequestRetrier
这是我想打造类:
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,但我一直GET同样的错误。
如果我只使用RequestAdapter协议并删除should-function,那么一切都会建立好,但我似乎无法获得构建的RequestRetrier,这对我的项目也是需要的。
任何想法,我从我的课缺少什么?
编辑:
我似乎有一个命名空间的问题,因为代码构建成功我应该函数的定义替换错误与Swift.Error后:
func should(_ manager: SessionManager, retry request: Request, with error: Swift.Error, completion: @escaping RequestRetryCompletion) {
谢谢你的回答。它部分帮助我解决了我的问题。我可能会遇到某种名称空间冲突,但是当我将Swift.Error替换为Error时,我的代码生成成功了。 – liitokone