2016-12-02 3 views
2

Я использую Alamofire для моего запроса в этой функции, и у меня есть эта ошибка, если кто-то может мне помочь, пожалуйста, заблаговременно благодарите.Тип выражения 'DataRequest' неоднозначен без контекста Swift

типа Expression '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) 
      } 
     }) 
} 
+0

Какая линия бросает эту ошибку? Я не вижу класс «DataRequest» в любом месте кода, который вы отправили. –

+0

Это линия .responseJSON (completeHandler: – CizooDev

+0

Odd. Похож на ошибку AlamoFire, и я не очень разбираюсь в AlamoFire. –

ответ

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 протокол.

0

Спасибо!

Наконец, это было беспокойство типа декларации Вот код решена:

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?) 
      } 
     }) 
} 
Смежные вопросы