Crear un método genérico con AlamoFire en Swift

Estoy usando AlamoFire para mis llamadas a la API, y tengo algo como esto en todo mi proyecto:

static func login(userName: String, password: String) -> User {
    let parameters = ["userName": userName , "password": password]
    let user = User()
    Alamofire.request(.POST, "myserver.com/login", parameters: parameters, encoding: .JSON)
        .validate()
        .responseObject { (response: Response<User, NSError>) in
            switch response.result {
            case .Success(let value):
                user.valueHandle?(value)
            case .Failure(let error):
                user.errorHandle?(error)
            }
    }

    return user
}

(verhttps://stackoverflow.com/a/37949671/406322 sobre cómo se me ocurrió el código anterior).

El problema es que tengo muchos objetos distintos de Usuario y hay repetición de código con solo el tipo de objeto diferente, así que estoy tratando de crear un método genérico, algo como esto:

static func sendRequest<T>(method: Alamofire.Method, urlString: String, parameters: [String: AnyObject]?) -> T {
        let response : T
        Alamofire.request(method, urlString, parameters:parameters)
            .validate()
            .responseObject { (response: Response<T, NSError>) in
                switch response.result {
                case .Success(let value):
                    response.valueHandle?(value)
                case .Failure(let error):
                    response.errorHandle?(error)
                }
        }

        return response 
 }

Pero Swift se queja:

Cannot convert value of type '(Response<T, NSError>) -> ()' to expected argument type 'Response<_, NSError> -> Void'

Esto es para que pueda hacer algo como esto:

User.swift
static func login(userName: String, password: String) -> User {
        let parameters = ["userName": userName, "password": password]
    return sendRequest<User>(.GET, "http://myserver.com/users", parameters)
}

y en mi código de llamada:

User.login(txtUserName.text!, password: txtPassword.text!)
            .success { (value) in
                var user = value as! User
                //do something with user
            }
            .error { (error) in
                //show error
            }

¿Qué no estoy haciendo bien?

Respuestas a la pregunta(1)

Su respuesta a la pregunta