Alamofire и AlamofireObjectMapper создают универсальную функцию

#ios #swift #generics #swift3 #alamofire

#iOS #swift #универсальные #swift3 #alamofire

Вопрос:

Я пытаюсь создать универсальный метод для запросов с новейшими (4.0) версиями Alamofire и AlamofireObjectMapper. Я начал с приведенного ниже кода:

   func execute<T>(request : Request, completionHandler: @escaping (DataResponse<T>) -> Void){
    let url: URLConvertible  = baseURL   request.path
    Alamofire.request(url, method: request.method, parameters: request.parameters()).responseObject(completionHandler: { (response: DataResponse<T>) in
      completionHandler(response)
    })
  }
  

Но я получаю сообщение об ошибке:

не удается преобразовать значение типа ‘DataResponse -> Void’ в ожидаемый тип аргумента ‘DataResponse -> Void’

В чем проблема с этим? Я хотел бы использовать ее следующим образом:

   func login(loginRequest: LoginRequest, completionHandler: @escaping (DataResponse<LoginResponse>) -> Void) {
    self.execute(request: loginRequest, completionHandler: { response in
      completionHandler(response)
    })
  }
  

Спасибо за помощь

Ответ №1:

Синтаксис Alamofire 4 уже перенесен на Swift 3.

     Alamofire.request(url,
                      method: .get,
                      parameters: parameter,
                      encoding: URLEncoding.default,
                      headers: nil)
        .response(completionHandler: { (defaultDataResponse) in
                // do something with the response
                print(defaultDataResponse)
        })
  

Комментарии:

1. Я меняю синтаксис на Alamofire 4 с синтаксисом Swift 3. С этим нет проблем.