我一直在遷移我的項目到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