以下のコードを使用して、サーバーとデータを同期しています。タスクを完了した後、私は呼び出すしたいと思います:Swift 3.0の補完ハンドラー
self.refreshControl?.endRefreshing()
しかし、私はそれがこのメソッドの内部で起こるかもしれないものの後に起こることを確認したいと思います。これは私が補完ハンドラを使う場所ですか? httpレスポンスを取得した後に実行されるコードをすでに実行しているので、私は混乱します。補完ハンドラを追加すると、http応答を受け取った後で実行されますか?下のコードで何か起こった後に起こるendRefreshing()コードをそこに置くことができますか? ありがとう!
func syncCustomers(token: String) {
let url:NSURL = NSURL(string: Constants.Api.BaseUrl + "api/customer")!
let session = URLSession.shared
let request = NSMutableURLRequest(url: url as URL)
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
request.httpMethod = "GET"
let task = session.dataTask(with: request as URLRequest) { (data, response, error) in
guard let data = data else { return }
do {
if error != nil {
self.showAlert(title: "Error", message: error!.localizedDescription)
}
else if let httpResponse = response as? HTTPURLResponse {
if httpResponse.statusCode == 200 {
let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? Array<Any>
DispatchQueue.global().async {
for item in json! {
if let customer = Customer(json: item as! [String : Any]) {
_ = SqliteDB.instance.replaceCustomer(customer: customer)
}
}
self.customers = SqliteDB.instance.getCustomers()
self.tableView.reloadData()
}
} else if httpResponse.statusCode == 401 {
self.showAlert(title: "Error", message: "Unauthorized. Please try logging in again.")
}
}
} catch let error as NSError {
self.showAlert(title: "Error", message: error.localizedDescription)
}
}
task.resume()
}
感謝。特に、どのように私は各パスの最後に完了を呼び出す必要があるか説明します。 – Primico
@Primico心配する必要はありません。お力になれて、嬉しいです。 – Fogmeister
@Primico、こんにちは、完了はdataTaskでどのように機能しますか?あなたはこの質問(http://stackoverflow.com/questions/43663416/calling-completionhandler-with-firebase)で私を助けることができますか? Tks – Cauca