質問: swift 4 / iosを使用して、firebase databaseなどへの非同期リクエストを処理する最良の方法は何ですか? 私はfirebaseデータベースを使用しており、しばらくの間はfirestoreを使用しています。私は中級レベルのプログラマーであり、まだuniです。 firebaseデータベースと非同期で発生している呼び出しを処理し、uiを更新する最良の方法は、まだ少しわかりません。以前はデリゲートを使用してこれを行っていましたが、gcdとdispatch.main.async(完全には理解していません)が別の方法であるかどうか疑問に思っていました。
回答: gcdと委任は異なる問題を解決します。委任は戦略パターンのappleの名前ですが、gcdはスレッドを管理するためのapiライブラリです(以下で更新されます)。このため、あなたの質問はあまり意味がありません。 gcdと委任の両方を使用する状況はたくさんあります。私の推測では、あなたはデリゲーションとコールバックとしてクロージャーを渡すことについて実際に質問していると思います。 swiftコミュニティはまだこの点でベストプラクティスを実行しているため、明確なルールを定めることは困難です。一般的に、しかし、私はそれを言うでしょう: delegateが関連する型を必要とする場合(またはanyとキャストを使用する場合)、クロージャーの方が適しているでしょう。クロージャーで、2つ以上のケースで列挙型を渡す必要がある場合は、デリゲートの方が適しています。 delegateが1つのメソッドのみで終了する場合は、クロージャーを使用してください。クロージャを@escapingパラメータとして渡す必要がある場合は、デリゲートを優先します。 上記は相互に排他的ではありません。ここでは個人の好みが大きく影響します。すべての場合において、デリゲート/クロージャを提供するコードのニーズに応えたいと考えています。そのコードの生活を楽にするものは何でもあなたのガイドでなければなりません。編集ジョシュキャスウェルは、gcdに関する私の正確さの欠如を私に呼びかけました。 appleのドキュメントによると、gcdは " [システムを管理するキューをディスパッチするために作業を送信することにより、マルチコアハードウェア上でコードを同時に実行する]のフレームワークです。 "しかし、彼は 委任パターン がappleの説明で「デリゲート」について話すときに参照されるものであることについて間違っています。 戦略パターン でappleのデリゲートを同等化することは、より正確です。