如何访问Swift中的闭包variables?

我是新来的Swift,我试图从这个函数得到的结果。 我不知道如何访问闭包内部的variables,它是从闭包外部传递给sendAsynchronousRequest函数的。 我已经阅读了Apple Swift指南中有closures包的章节,但是我没有find答案,而且在StackOverflow上找不到帮助。 我不能把'json'variables的值赋给'dict'variables,并把它粘在闭包之外。

var dict: NSDictionary! NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response, data, error) in var jsonError: NSError? let json = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: &jsonError) as? NSDictionary dict = json print(dict) // prints the data }) print(dict) // prints nil 

 var dict: NSDictionary! // Declared in the main thread 

闭包然后是asynchronous完成的,所以主线程不会等待它

 println(dict) 

在封闭实际完成之前调用。 如果你想用dict来完成另一个函数,那么你需要从闭包中调用这个函数,如果你愿意的话,可以把它移动到主线程中,如果你要影响UI的话,你可以这样做。

 var dict: NSDictionary! NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response, data, error) in var jsonError: NSError? let json = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: &jsonError) as? NSDictionary dict = json //dispatch_async(dispatch_get_main_queue()) { //uncomment for main thread self.myFunction(dict!) //} //uncomment for main thread }) func myFunction(dictionary: NSDictionary) { println(dictionary) } 

你正在调用一个asynchronous函数和打印act而不用等待它完成。 换句话说,当print(dict)被调用时,函数没有完成执行(因此dict nil

尝试类似

 var dict: NSDictionary! NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response, data, error) in var jsonError: NSError? let json = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: &jsonError) as? NSDictionary dict = json doSomethingWithJSON(dict) }) 

并把你的JSON逻辑放在一个doSomethingWithJSON函数中:

 void doSomethingWithJSON(dict: NSDictionary) { // Logic here } 

这确保了您的逻辑只有在URL请求完成后才能执行。