Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。5.5からサポートされた非同期処理について説明します。非同期処理とそれまでの処理の違い、非同期処理の具体的な使い方、簡単なサンプルを作成して処理が短く記述できることを、例を挙げながら解説します。5.5からサポートされた非同期処理の具体的な使い方について説明します。次の方を対象にしています。非同期処理を利用するSwift言語の構文として、async/await構文が定義されました。async/await構文を利用すると、デリゲートやクロージャを経由せずに処理の結果を取得する直感的な記述ができます。async/await構文以前の処理async/await構文以前のSwiftの基本的な処理の例として、以下の記事のJSON解析の処理が挙げられます。APIからの戻りJSONを解析するサンプルを再掲載します。サンプルの詳細は上記の記事にて確認できます。----------(3)}サンプルを確認すると、JSONを解析する処理は次の3つのプロセスが必要です。URLSessionクラスで処理を実行するオブジェクトを定義する。dataTaskメソッドでJSONを解析する処理をクロージャで定義する。(2)で定義した処理をresume()メソッドで実行する。このように処理が長くなりがちです。ボタンを押した時に処理を開始する場合などは、(2)と(3)を記述する場所が離れてしまい、コードの可読性が下がってしまうことも考えられます。async/await構文を用いた処理async/await構文のasyncとawaitにはそれぞれ次の意味があります。待機するメソッド名の前方メソッドを宣言する時に、asyncをつけることで非同期に処理を行うことを明確にできます。awaitをつけて作成したメソッドを呼び出すことで、結果が返るまで待機する処理を行うことができます。このようにasyncとawaitを組み合わせることで、開発者の意図する非同期の処理を容易に作成/実行することができます。既存クラスのメソッドにおいても、awaitを記述することで、処理が終わるのを待って結果を取得することができます。前項のJSONを解析する処理を、async/await構文を用いると、次のように表せます。}}処理全体はPersonLoaderクラスとして宣言しています。クラス内でJSONを取得してパースする処理を、asyncLoadのメソッド名で定義します。非同期に実行したいので、メソッド名の後ろに「async」を記述します(1)。JSONの取得時と解析時にはエラーが起きるかもしれないので、「throws」をつけてエラーを返せるようにしています。URLからデータを取得する処理は、URLSessionのdataメソッドを利用しています。この時に、データを取得する処理を待機させたいので、dataメソッドの前に「await」を記述しています(2)。awaitを記述することで、メソッドの戻り値が得られるまで処理が待機できます。(2)の時点で戻り値が得られるため、値を得るためにデリゲートやクロージャを記述する必要はなくなります。その後の処理に関しては、前項のサンプルと変わりません。作成したPersonLoaderクラスのasyncLoadメソッドを、ボタンを押した時に呼び出すには、次のようにasyncLoadメソッドの前にawaitを記述します。}asyncLoadメソッドの前にawaitを記述して、処理が終わるのを待つようにしています。asyncLoadメソッド自体がエラーを返すので、do-catch文とtryも忘れずに記述します。サンプルを実行すると、前項のサンプルの実行結果と同じようにAPIから取得したJSONの内容をコンソールに出力します。