Ios 在Swift中使用AlamoFire创建通用方法

Ios 在Swift中使用AlamoFire创建通用方法,ios,swift,swift2,alamofire,Ios,Swift,Swift2,Alamofire,我正在使用AlamoFire进行API调用,在我的项目中都有类似的内容: static func login(userName: String, password: String) -> User { let parameters = ["userName": userName , "password": password] let user = User() Alamofire.request(.POST, "myserver.com/login", parame

我正在使用AlamoFire进行API调用,在我的项目中都有类似的内容:

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
}

我做得不对的是什么?

您可以使用BaseObject轻松完成以下操作:

class BaseUser: ResponseObjectSerializable {
    var valueHandle : ((BaseUser)->())?
    var errorHandle : ((NSError)->())?

    required init?(response: NSHTTPURLResponse, representation: AnyObject) {

    }
}



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

    return res
}
class BaseUser:ResponseObjectSerializable{
var valueHandle:((BaseUser)->())?
变量errorHandle:((n错误)->())?
必需的初始化?(响应:NSHTTPURLResponse,表示:AnyObject){
}
}
func sendRequest(方法:Alamofire.method,urlString:String,参数:[String:AnyObject]?)->T{
让我们:T
请求(方法,urlString,参数:parameters)
.validate()
.responseObject{(响应:响应)位于
开关响应。结果{
成功案例(let value):
res.valueHandle?(值)
案例。失败(let错误):
res.errorHandle?(错误)
}
}
返回res
}

class
可以控制句柄,使用baseobj,您不需要使用协议反复编写它们

您看到@AMomchilov了吗?是的,但我在这里做的是将其包装到更高一级,因此响应处理程序会发送回我的调用代码(如javascript承诺)@AMomchilov我编辑了我的问题以澄清
Cannot convert value of type '(Response<T, NSError>) -> ()' to expected argument type 'Response<_, NSError> -> Void'
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)
}
User.login(txtUserName.text!, password: txtPassword.text!)
            .success { (value) in
                var user = value as! User
                //do something with user
            }
            .error { (error) in
                //show error
            }
class BaseUser: ResponseObjectSerializable {
    var valueHandle : ((BaseUser)->())?
    var errorHandle : ((NSError)->())?

    required init?(response: NSHTTPURLResponse, representation: AnyObject) {

    }
}



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

    return res
}