私はREST/web requests
での作業に関するチュートリアルに従っています。チュートリアルでは、我々はAlamofire
を使用してAPIからポケモンの詳細を取得ポケモンずかんアプリに向けて作業している、そして私たちのUIでそのデータを表示します。ここでAlamofireリクエスト後にUIを更新するためにDispatchQueue.mainが必要ですか?
は、関連するコードは次のとおりです。
typealias DownloadComplete = (Bool) ->()
// Model class
func downloadPokemonDetails(completed: @escaping DownloadComplete)
{
Alamofire.request(_pokemonURL).responseJSON { (response) in
var success = true
if let jsonData = response.result.value as? Dictionary<String, Any>
{
// parse the json here
...
}
else
{
success = false
}
completed(success)
}
}
// Controller class
override func viewDidLoad() {
super.viewDidLoad()
pokemon.downloadPokemonDetails(completed: { (success) in
if success
{
self.updateUI()
}
else
{
print("FAILED: TO PARSE JSON DATA")
}
})
}
func updateUI()
{
attackLbl.text = pokemon.attack
defenseLbl.text = pokemon.defense
heightLbl.text = pokemon.height
weightLbl.text = pokemon.weight
}
今、私の質問は:私たちはDispatchQueue.main.
を使用するので、そこのようなUIを更新するべきではないのですか?
pokemon.downloadPokemonDetails(completed: { (success) in
if success
{
DispatchQueue.main.async {
self.updateUI()
}
}
チュートリアルでは、それを残して、私はDispatchQueue
がUIを更新するために、ここで必要とされているかはわかりません。バックグラウンドスレッドでUIを更新するのは悪い習慣だから、誰かがここでDispatchQueueを使ってメインスレッドを取得する必要があるかどうかについては、私は非常に感謝しています。 1は全体のコメント欄を読みたくない場合は
はあなたをしました[Alamofire Readme](https://github.com/Alamofire/Alamofire)をご覧ください。 - "デフォルトで応答ハンドラがメインディスパッチキューで実行されます...." –
@MartinRコメントをいただきありがとうございます。私は実際には行っていませんが、この場合、UIを更新するときにDispatchQueue.mainは必要ないということですか?私はまだこのものに新しいです。 – aresz
あなたは必要ありません。これは 'dispatch_get_current_queue()== dispatch_get_main_queue()'で確認できます。 –