将Alamofire调用包含在Swift中的自定义对象中?

我正在使用Alamofire对我的服务器进行REST调用以获取,添加,更新和删除对象。 我想知道的是,是否有可能(并推荐)将Alamofire调用包装到我自己的自定义对象(DTO)中,以便我可以简单地执行user.delete(id)和user.add(newUser)之类的操作。在我的代码库中使用Alamofire代码? 如果是这样,我怎么能这样做,所以我可以返回成功和失败处理程序(来自javascript世界的“承诺”)? 像这样的东西:

user.add(newUser) .success(userObject){ } .error(response){ } 

这是我目前的代码:

 //register a user let parameters = [“username”: txtUsername.text! , "password": txtPassword.text!] Alamofire.request(.POST, “http://myserver.com/users", parameters: parameters, encoding: .JSON) .validate() .responseObject { (response: Response) in if let user = response.result.value { self.user = user } } } User.swift final class User : ResponseObjectSerializable, ResponseCollectionSerializable { var id: Int var firstName: String? var lastName: String? var email: String? var password: String? init?(response: NSHTTPURLResponse, representation: AnyObject) { id = representation.valueForKeyPath("id") as! Int firstName = representation.valueForKeyPath("first_name") as? String lastName = representation.valueForKeyPath("last_name") as? String email = representation.valueForKeyPath("email") as? String password = representation.valueForKeyPath("password") as? String } static func collection(response response: NSHTTPURLResponse, representation: AnyObject) -> [User] { var users: [User] = [] if let representation = representation as? [[String: AnyObject]] { for userRepresentation in representation { if let user = User(response: response, representation: userRepresentation) { users.append(user) } } } return users } //Can I wrap my alamofire calls in methods like this: func getById(id: Int) func getAll() func add(user: User) func update (user: User) func delete(id: int) } 

我认为静态函数是你想要的,我为它写了一个例子:

 final class User{ var valueHandle :((AnyObject) -> ())? var errorHandle :((NSError)->())? func success(value:(AnyObject) -> ())->Self{ //pass success handle self.valueHandle = value return self } func error(error:(NSError)->())->Self{ //pass error handle self.errorHandle = error return self } static func getById(id: Int)->User{ return userRequest(.GET, urlString: "https://httpbin.org/get", param: ["foo": "bar"]) } static func userRequest(method:Alamofire.Method , urlString:String ,param:[String: AnyObject]?) -> User { let user = User() Alamofire.request(method, urlString, parameters:param) .validate() .responseJSON { response in switch response.result { case .Success(let value): //invoke with your back userobj user.valueHandle?(value) print(value) case .Failure(let error): user.errorHandle?(error) } } return user } } 

然后你可以使用像:

 User.getById(1) .success { (value) in print("value = \(value)") } .error { (error) in print("error = \(error)") } 

希望它有所帮助:D