简体   繁体   English

快速获取变量的值

[英]get the value of variable out of closure swift

So I have a closure called task which is a post request and I have a global variable called values and I'm trying to set the value of "values" to be the data that I retrieved back from database stored in a variable called "array". 因此,我有一个名为task的闭包,这是一个后请求,并且我有一个名为values的全局变量,我试图将“ values”的值设置为从数据库中检索到的数据,该数据存储在一个名为“ array”的变量中”。 Don't worry about the tableview.reloadData part, that's already done. 不用担心tableview.reloadData部分,这已经完成了。 i just wanna know how to get the value out of closure. 我只是想知道如何从封闭中获得价值。

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()

use completion for any asynchronous task in closure 对闭包中的任何异步任务使用完成

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();
        }
    }
} 

change the way you get the value in viewdidload 更改在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM