我如何从功能使用Alamofire返回价值

时间:2015-11-25 04:21:16

标签: swift alamofire

我如何从使用过的Alamofire功能中返回值。我尝试在外面打印.responseJSON没有设置ArrData中的值,但我尝试在其中打印工作 这段代码:

func getDept()->NSMutableArray
{

    var ArrData:NSMutableArray = []
    let url = "http://www.xxxxxxxxxxxxx.com"
    Alamofire.request(.GET, url).responseJSON { response in
        let json = JSON(response.result.value!)
        let count = json.count
        for var index = 0; index < count;index++
        {
            ArrData.addObject(json[index]["dept"].stringValue)
        }

    }
    return ArrData
}

2 个答案:

答案 0 :(得分:2)

我最好至少检查一下你将在代码中使用的框架的README.md

  

Alamofire中的网络是异步完成的。异步   编程可能是程序员不熟悉的挫折源   这个概念,但有很好的理由这样做   方式。

     

而不是阻止执行以等待来自服务器的响应,   指定回调以在收到响应后处理响应。该   请求的结果仅在响应范围内可用   处理程序。任何执行都取决于响应或收到的数据   必须在处理程序中完成服务器。

答案 1 :(得分:0)

尝试使用像这样的 处理程序 和回调:

//  Usage:
//
//  # Show Overlay
//  LoadingOverlay.shared.showOverlay(self.navigationController?.view)
//
//  # Hide Overlay
//  LoadingOverlay.shared.hideOverlayView()

import UIKit
import Foundation

public class LoadingOverlay: NSObject {
    var overlayView = UIView()
    var activityIndicator = UIActivityIndicatorView()

    class var shared: LoadingOverlay {
        struct Static {
            static let instance: LoadingOverlay = LoadingOverlay()
        }
        return Static.instance
    }

    public func showOverlay(view: UIView!) {
        overlayView = UIView(frame: UIScreen.mainScreen().bounds)
        overlayView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.6)
        activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        activityIndicator.center = overlayView.center
        overlayView.addSubview(activityIndicator)
        activityIndicator.startAnimating()
        view.addSubview(overlayView)
    }

    public func hideOverlayView() {
        activityIndicator.stopAnimating()
        overlayView.removeFromSuperview()
    }
}

您将数组传递给回调所以当您调用getopt时,可以打印数组。有人喜欢这样:

 func getopt(callback:(array: [String]) -> void ){

        func completion(request: NSURLRequest?, response:NSHTTPURLResponse?,result:Result<AnyObject>){
                if let rdata = result.value{
                    let data = JSON(rdata)
                    print(data)
                    let myArray = [String]
                    let objects = data.array
                    for object in objects{
                      myArray.append(object)
                    }
                    callback(myArray)
                }
         }

           let url = "http://www.xxxxxxxxxxxxx.com"
           Alamofire.request(.GET,url),
                encoding: .JSON).responseJSON(completionHandler: completion)  

}