[英]How to get the value of the variable that is assigned in a closure (Swift)
[英]get the value of variable out of closure swift
因此,我有一个名为task的闭包,这是一个后请求,并且我有一个名为values的全局变量,我试图将“ values”的值设置为从数据库中检索到的数据,该数据存储在一个名为“ array”的变量中”。 不用担心tableview.reloadData部分,这已经完成了。 我只是想知道如何从封闭中获得价值。
var values:NSArray = []
@IBOutlet weak var Open: UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
Open.target = self.revealViewController()
Open.action = #selector(SWRevealViewController.revealToggle(_:))
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
get()
print ("values=\(values)")
}
func get(){
let request = NSMutableURLRequest(URL: NSURL(string: "http://www.percyteng.com/orbit/getAllpostsTest.php")!)
request.HTTPMethod = "POST"
let postString = "user=\("ios")"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error=\(error)")
return
}
print("response = \(response)")
let array = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray
dispatch_async(dispatch_get_main_queue()) { [unowned self] in
self.values = array
print ("error=\(self.values)")
self.tableView?.reloadData();
}
}
task.resume()
对闭包中的任何异步任务使用完成
func get(completion:(value: NSArray) -> Void){
// request part
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
// your serialization code
dispatch_async(dispatch_get_main_queue()) { [unowned self] in
self.values = array
// return value to completion
completion(value: array)
print ("error=\(self.values)")
self.tableView?.reloadData();
}
}
}
更改在viewdidload中获取值的方式
get{(value) in
// finish NSURLSession task and everything should be done in this closure
self.values = value
print ("values=\(self.values)")
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.