Libor Zapletal
Libor Zapletal

Reputation: 14092

Alamofire and AlamofireObjectMapper create generic function

I am trying to create generic method for requests with newest (4.0) versions of Alamofire and AlamofireObjectMapper. I started with code below:

  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)
    })
  }

But I get error:

cannot convert value of type 'DataResponse -> Void' to expected argument type 'DataResponse -> Void'

What's problem with this? I would like to use it like this:

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

Thanks for help

Upvotes: 1

Views: 740

Answers (1)

Willjay
Willjay

Reputation: 6459

The syntax of Alamofire 4 is already migrate to 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)
        })

Upvotes: 1

Related Questions