2015-05-29 68 views
0

我很新的swift。我试图返回JSON并在列表视图中查看它,我不能从我的AppApi类获取JSON返回到我的viewDidLoad()。任何帮助,将不胜感激。需要返回json obj所以我显示在列表视图回来无

谢谢您的高级。 特立

override func viewDidLoad() { 
    super.viewDidLoad() 


    let api = AppAPI(token:self.toPassToken) 
    var test = api.getOrders() 

    println("why does test come back as an empty array") 
    println(test) 
    println(test.count) 
} 


class AppAPI { 
    var token: String 
    let apiEndPoint = "endpoint" 
    let apiUrl:String! 
    let consumerKey:String! 
    let consumerSecret:String! 
    var returnData = [:] 

    init(token:String){ 
     self.apiUrl = “hidden-for-security” 
      self.consumerKey = "token" 
     self.consumerSecret = "my consumer secret" 
     self.token = token 
    } 

    func getOrders() -> [JSON] { 
     return makeCall("contacts") 
    } 

    func makeCall(section:String) -> [JSON] { 

     let params = ["token":"\(self.token)"] 

     Alamofire.request(.POST, "\(self.apiUrl)", parameters: params) 

      .responseJSON { (request, response, json, error) -> Void in 
       println("error \(request)") 
       self.returnData = json! as! NSDictionary 




     } 

     return results! 
    } 
} 
+0

我没有看到这段代码是如何编译的,它包含了'return results!',它是从未定义的。 – Jonah

回答

0

在你makeCall(section:String) -> [JSON]功能要返回results!results有没有在这个函数中设置?

您是不是要退回returnData

+0

是的,它应该是returnData让我再检查一次,谢谢 – user788585

0

Alamofire.request执行异步请求; responseJSON将在请求在将来的某个点完成时执行该关闭。

你几乎肯定不想阻止你的viewDidLoad方法,直到这个请求结束,因为这将阻止你的主线程,并使应用程序无响应。请在viewDidLoad开始请求,并在请求结束时作出反应。 您可以这样做的一种方法是将封闭传递给getOrders,在请求结束时您可以执行该封闭。

+0

你能提供例子吗?我正在查找关闭。谢谢你的帮助。 – user788585

+0

重要的一点是,你从接收响应开始解耦请求,并意识到你不能等待响应。你如何实现这一点真的取决于你想要你的应用程序做什么,一个简单的版本可能是你的'viewDidLoad'提供一个异步回调块('api.getOrders {/ * .../* /})。你的问题没有描述你打算如何使用这个JSON响应。 – Jonah