2016-10-20 11 views
1

私は現在Swiftのコールバックについて学んでおり、非常に基本的なことを理解しようとしています。私はどこでもこれにまっすぐ答えを見つけることができないようです。クロージャを自動的に非同期にする関数はありますか?

私は私がしなければということを理解する:

URLSession.dataTask(with: URLRequest) { data, response, error in }

それは私が完了ハンドラ内で結果と自分の仕事をすることができた後に、非同期ネットワーク要求を、実行します。

しかし、何らかのバックグラウンドタスクを行う独自の関数を記述したいとします。単に関数のパラメータ(関数本体で呼び出される)としてクロージャを持つだけで、関数を非同期で動作させるのに十分でしょうか?あるいは、関数本体でGCDメソッドを呼び出す必要がありますか?

+0

はい、別のスレッドにあることを確認する必要があります。 http://stackoverflow.com/questions/24056205/how-to-use-background-thread-in-swiftパラメータから関数を呼び出しても、非同期にはなりません。 http://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean –

+0

バックグラウンドでコードを動作させるにはGCDを使用する必要があります..dataTaskは非同期要求を送信しますデフォルトで –

答えて

3

単にコールバックパラメータを設定しても、メソッドの実装には影響しません。非同期にする場合は、明示的に非同期にする必要があります。これは、大規模中央ディスパッチ、オペレーションキュー、または他の非同期メソッドの呼び出しを使用して行うことができます。

関連する問題