2015-11-25 50 views
1

如何从函数Alamofire返回值。我尝试.responseJSON外面打印ArrData值没有设置,但我尝试打印里面工作 验证码:如何从函数返回值Alamofire

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 
} 

回答

0

尝试使用处理这样和一个回调:

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) 

} 

你的数组传递给你的回调所以,当你打电话,你把它的getopt可以打印阵列。一些像这样的:

func something(){ 
    getopt(callback) 
} 

func callback(array:[String]){ 
    print array[0] 
} 
2

它,我好主意,检查你所要去的框架至少README.md在您的代码中使用

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

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