私には2つの質問があります。Swift非同期HTTPリクエストは別のスレッドを作成しますか?
最初の1つは「即時非同期http要求が別のスレッドを作成しますか」です。
2番目の問題は、テーブルビューがあり、httpリクエスト後にサーバーから取得したデータに基づいてテーブルビューを更新する必要があることです。しかし、私がself.tableview?.loadDataをdispatch_asyncクロージャの外側で実行すると、動作しません。 (それは長い時間の後に更新されます)。
私の質問はなぜそれが起こるのですか?メインスレッドに戻らずに、そのスレッドだけでテーブルビューをリフレッシュできないのはなぜですか?
私は、しばらくの間、迅速なhttp要求とそのメカニズムの説明を探していました。もし誰かが詳細に説明したいのであれば、本当にありがとう!
私はあなたがスウィフトからNSURLSEssionを呼び出すことができますあなたの質問は、「スウィフト非同期HTTPリクエスト」について、実際にではなく、およそNSURLSession
(ORスウィフト3のURLSession
)
let request = NSMutableURLRequest(URL: NSURL(string: "http://xxx/getAllposts.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 responseString = try! NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary
if responseString!["success"] as! Int == 0{
return
}
let array:NSArray = responseString!["all"] as! NSArray
dispatch_async(dispatch_get_main_queue()) { [unowned self] in
self.values = array
self.tableView?.reloadData();
}
}
task.resume()
私はこの問題の半分を理解しています。私は最初にHTTPリクエストがバックグラウンドスレッドを作成することを知っています。しかし、それが「非同期要求」としても知られている理由です。他のスレッドは非同期にしましたか? – user5713716
Swift 3では、 'dispatch_async()'の構文が 'DispatchQueue.main.async()'に変更されています。 –