【问题标题】:Expression type 'DataRequest' is ambiguous without more context Swift表达式类型“DataRequest”在没有更多上下文 Swift 的情况下是模棱两可的
【发布时间】:2017-04-17 16:24:09
【问题描述】:

我在此功能中使用 Alamofire 来处理我的请求,如果有人可以帮助我,我会遇到此错误,请提前致谢。

表达式类型“DataRequest”在没有更多上下文的情况下是模棱两可的

 func report(_ track: Track, completionHandler: @escaping (_ error: NSError?) -> Void) {
    var headers:[String:String] = [:]
    if AuthManager.defaultAuthManager().isLoggedIn() {
        headers = ["Authorization": "Bearer " + AuthManager.defaultAuthManager().authToken.token!]
    }
    let params: [String: Any] = ["trackCode": track.code]
    let urlString = Cizoo.APIBaseUrl + CizooScheme.report
    CizooAPI.manager.request(urlString, method: .post, parameters: params, encoding: .JSONEncoding.default, headers: headers as HTTPHeaders)
        .validate()
        .responseJSON(completionHandler: { // Error at this line
            response in
            switch response.result {
            case .success:
                completionHandler(error: nil)
            case .failure(let error):
                completionHandler(error: error)
            }
        })
}

【问题讨论】:

  • 哪一行会抛出这个错误?我在您发布的代码中的任何地方都没有看到“DataRequest”类。
  • 这是一行 .responseJSON(completionHandler:
  • 奇数。看起来像是 AlamoFire 特有的错误,我对 AlamoFire 了解不多。
  • 哦,没问题的人:/!
  • 你使用的是什么版本的 Alamofire?

标签: ios swift response alamofire ambiguous


【解决方案1】:

从Alamofire源码可以看出,方法的声明是:

@discardableResult
open func request(
    _ url: URLConvertible,
    method: HTTPMethod = .get,
    parameters: Parameters? = nil,
    encoding: ParameterEncoding = URLEncoding.default,
    headers: HTTPHeaders? = nil)
    -> DataRequest
{
    var originalRequest: URLRequest?

    do {
        originalRequest = try URLRequest(url: url, method: method, headers: headers)
        let encodedURLRequest = try encoding.encode(originalRequest!, with: parameters)
        return request(encodedURLRequest)
    } catch {
        return request(originalRequest, failedWith: error)
    }
}

在您的情况下,可能 urlString 不符合 URLConvertible 协议。

【讨论】:

    【解决方案2】:

    谢谢!

    最后,这是类型声明的问题 这是解决的代码:

    func report(_ track: Track, completionHandler: @escaping (_ error: NSError?) -> Void) {
        var headers:HTTPHeaders? = [:]
        let params:Parameters? = ["trackCode": track.code]
        let encoding:ParameterEncoding = JSONEncoding.default
        let method:HTTPMethod = .post
        let urlString:URLConvertible = (Cizoo.APIBaseUrl + CizooScheme.report)
        if AuthManager.defaultAuthManager().isLoggedIn() {
            headers = ["Authorization": "Bearer " + AuthManager.defaultAuthManager().authToken.token!]
        }
        CizooAPI.manager.request(urlString, method: method, parameters: params, encoding: encoding, headers: headers)
            .validate()
            .responseJSON(completionHandler: {
                response in
                switch response.result {
                case .success:
                    completionHandler(nil)
                case .failure(let error):
                    completionHandler(error as NSError?)
                }
            })
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多