Alamofire下载数据后的返回值

我有一个使用Alamofire下载数据的函数,然后我想返回这些数据。 现在我知道Alamofireasynchronous运行,为了返回数据,我应该使用completionHandler ,但是我不知道如何使用它。 由于我不是第一个遇到这个问题的人,所以我find了一些解决类似问题的办法,但是我不能把它们应用到我的案例中去。 这是我的代码:

 func downloadImageFromServer(imageUrl: String) -> (String, String) { var myData1 = String() var myData2 = String() Alamofire.request(.GET, imageUrl) .responseImage { response in switch response.result { case .Success: if let newImage = response.result.value { myData1 = //returned image name myData2 = //edited image name } case .Failure: //Do something } } return (myData1, myData2) } 

我应该做这样的事情:

 func downloadImageFromServer(imageUrl: String, completionHandler: (String?, String?) -> ()) { var myData1 = String() var myData2 = String() Alamofire.request(.GET, imageUrl) .responseImage { response in switch response.result { //if user does have a photo case .Success: myData1 = //Something myData2 = //Something else completionHandler(myData1 as? String, myData2 as? String) case .Failure: //Print error } } } 

更新是的,我的问题与其他问题非常相似,但在我的情况下,代码必须返回2个值,这是我发现困难的地方。 这里是我的代码为gettin值:

  func getImages(orders: String, completionHandler: (String?, String?) -> ()) { justDoIt(orders, completionHandler: completionHandler) } 

接着

 getImages(imgURL) { responseObject, error in print(responseObject) return } 

它的工作原理,但是我只能访问两个的第一个值,如何访问两个?

你的方法是正确的。 你可以在你的闭包中使用另一个variables来查看请求是否被正确调用(或者函数中的另一个variables,例如errorHandler)。 使用示例:

 downloadImageFromServer(imgURL) { (data1, data2) in print("Data1: \(data1). Data2: \(data2)") } 

添加成功/失败variables到你的函数的基本例子:

 func downloadImageFromServer(imageUrl: String, completionHandler: (Bool, String?, String?) -> ()) { var myData1 = String() var myData2 = String() Alamofire.request(.GET, imageUrl) .responseImage { response in switch response.result { //if user does have a photo case .Success: myData1 = //Something myData2 = //Something else completionHandler(true, myData1 as? String, myData2 as? String) case .Failure: completionHandler(false, nil, nil) //Print error } } } 

downloadImageFromServer()的改进版本的用法:

 downloadImageFromServer(imgURL) { (succes, data1, data2) in if success { print("Success. Data1: \(data1). Data2: \(data2)") } else { print("Error. Data1: \(data1). Data2: \(data2)") } }