2016-06-30 2 views
0

私はポストリクエストであるtaskというclosureを持っていますが、私は値と呼ばれるグローバル変数を持っていて、 "値"の値をデータとして設定しようとしています私は "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() 
+0

私はそれを得ることはありませんあなたはのviewDidLoadで値を取得する方法。何をしたいですか ?クロージャーから「データ」を取り出しますか?何をすべきか ? – Randy

+0

だから私はグローバル変数var値を持っている:NSArray = []と私はここでデータベースからデータを取得配列= tryしよう! NSJSONSerialization.JSONObjectWithData(データ!,オプション:NSJSONReadingOptions.MutableContainers)を! NSArray;そのグローバル変数の値を変数 "array"の値に設定したい –

+0

あなたはすでに 'self.values = array'行を使っています。あなたの問題は何ですか? – dan

答えて

3

使用完了

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

変更

get{(value) in 
     // finish NSURLSession task and everything should be done in this closure 
     self.values = value 
     print ("values=\(self.values)") 
    } 
+0

私はこれを試して、あなたに関数のパラメータに追加した行完了(値:配列) –

+0

に "未解決の識別子の使用"補完 "というエラーが表示されますか? – xmhafiz

+0

私はそれをしました –

関連する問題