【问题标题】:Cannot assign value of type 'RequestRetrier?' to type 'RequestRetrier?'无法分配“RequestRetrier”类型的值?键入“RequestRetrier?”
【发布时间】:2018-06-08 01:01:16
【问题描述】:

我正在尝试像 Alamofire 页面中的示例一样使请求重试器,但我收到此错误:

这里是请求重试代码:

public typealias RequestRetryCompletion = (_ shouldRetry: Bool, _ timeDelay: TimeInterval) -> Void

public protocol RequestRetrier {
func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion)}

class RequestRetryHandler: RequestRetrier {
public func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) {
    if let response = request.task?.response as? HTTPURLResponse, response.statusCode == 503 {
        completion(true, 10.0) // retry after 1 second

    } else {
        completion(false, 0.0) // don't retry
    }
}}

这就是错误发生的地方:

let manager = Alamofire.SessionManager.default
manager.retrier = RequestRetryHandler() as? RequestRetrier

【问题讨论】:

    标签: ios swift networking alamofire


    【解决方案1】:

    您不应该重新声明协议或RequestRetryCompletion。这已经在 Alamofire 中为您完成了。您需要做的就是:

    import Alamofire
    import Foundation
    
    class RequestRetryHandler: RequestRetrier {
        func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) {
            if let response = request.task?.response as? HTTPURLResponse, response.statusCode == 503 {
                completion(true, 10.0) // retry after 1 second
    
            } else {
                completion(false, 0.0) // don't retry
            }
        }
    }
    
    let manager = Alamofire.SessionManager.default
    manager.retrier = RequestRetryHandler()
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      相关资源
      最近更新 更多