Alamofire Post请求之后如何获得完成处理程序/块?

我有一个处理Apple Push Notification Service远程通知的方法。 当这个方法被执行时,我希望它调用我的服务器,并使用Alamofire库进行HTTP POST请求。 我想执行另一个方法来处理POST请求的响应。

我的问题是,我正在使用现有的API从这个POST请求中的服务器获取configuration文件。 所以我需要使用这个现有的API,并找出何时从远程通知中明确触发了此configuration文件提取。

由于Alamofire请求是在后台队列中完成的,在从服务器接收到configuration文件后,如何执行方法?

什么是解决这个问题的好select?

谢谢!

由于Alamofire请求是在后台队列中完成的,在从服务器接收到configuration文件后,如何执行一个方法呢?

响应处理是build立在Alamofire。 你可以做这样的事情(改编自文档 ):

 Alamofire.request(.POST, "http://httpbin.org/get", parameters: ["foo": "bar"]) .response { (request, response, data, error) in println(request) println(response) println(error) } 

请注意.response方法调用,它将一个完成处理程序添加到请求对象; 完成处理程序在请求完成(或失败)时由Alamofire调用。

从你的问题expression中你不清楚你想要解决什么问题。 但是你已经在上面的问题评论中澄清了你的意图。

据我现在理解的问题,你有一些代码,更新服务器上的configuration文件,并处理服务器的响应。 代码在两个上下文中调用,一个由用户的手动请求启动,另一个由推送通知启动。 在第一种情况下,在处理来自服务器的响应之后,您不希望生成警报,但在第二种情况下,则是这样。

你确实有一个闭包,你可以用它来处理不同的行为,即使这个差异发生在这个过程的asynchronous部分。 下面是一张草图(不是实际的工作代码):

 func updateProfile(parameters: [String:String], showAlert: Bool) { Alamofire.request(.POST, "http://myserver.com/profile", parameters: parameters) .response { (request, response, data, error) in if (error == nil) { processProfileResponse(response) if showAlert { showProfileWasUpdatedAlert() } } } } 

请注意传递给updateProfile方法的showAlert参数。 如果传入true ,则会在接收到服务器响应后调用showProfileWasUpdatedAlert方法来显示警报。 请注意,此布尔值由处理Alamofire响应的闭包“捕获”,因为闭包是在updateProfile函数内部定义的。

这,恕我直言,是比你的AppDelegate声明一个应用程序全局更好的方法。

干得好

 func AlamofireRequest(method: Alamofire.Method, URLString: URLStringConvertible, parameters: [String : AnyObject]?, encoding: ParameterEncoding, headers: [String : String]?) -> Alamofire.Result<String>? { var finishFlag = 0 var AlamofireResult: Alamofire.Result<String>? = nil Alamofire.request(method, URLString, parameters: parameters, encoding: encoding, headers: headers) .responseString { (_, _, result) -> Void in if result.isSuccess { finishFlag = 1 AlamofireResult = result } else { finishFlag = -1 } } while finishFlag == 0 { NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture()) } return AlamofireResult }