2021/5/27
「SwiftUIでUIKitを使いたい」
「SwiftUIのCoordinator(コーディネータ)って何?」
「Coordinatorの使い方を知りたい」
と言う人に向けて、この記事は書かれています。
どうも、ちょげ(@chogetarou)です。
前回の[SwiftUI][iOS]UIKitの使い方(1)〜ビューの表示〜に引き続き、この記事ではCoordinator(コーディネータ)について解説します。
Coordinator(コーディネータ)とは

まず、コーディネータとは、SwiftUIでイベントを管理するためのクラスです。
UIViewRepresentableを使えば、SwiftUIでビューを表示することが出来ます。
しかし、アプリはビューだけでは出来ていませんよね。
ボタンがタップされた時の「画面遷移」や「値の更新」といったイベントが必要となります。
UIKitでのイベントをSwiftUIで管理させたい。
その時、UIKitでのイベントをSwiftUIに伝えるのが「Coordinator(コーディネータ)」です。
使い方
では、Coordinatorの使い方を解説していきます。
Coordinatorクラス
まずは、Coordinatorクラスを作ります。
class Coordinator {
//管理するUIKitのビューを格納する変数
var parent: ParentView
init(_ parent: ParentView) {
//ビューを変数に渡す
self.parent = parent
}
//イベント処理
}
Coodinatorクラスに必要なのは3つです。
- 管理するUIKitのビューを格納する変数
- 変数にUIKitのビューを渡すイニシャライザ
- イベントが起きた時の処理
変数とイニシャライザはテンプレートのようなものです。
イベントが起きた時の処理は、UIKitのビューによって違います。
Coordinatorを追加するUIKitのビューに合わせて記述してください。
makeCoordinatorメソッドの作成
次に、makeCoordinatorメソッドを作成します。
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
このメソッドは、UIKitのビューが表示される前に呼び出され、UIKitのイニシャライザを実行します。
イベント処理
Coordinatorクラスは、SwiftUIにUIKitのイベントを伝えるクラスです。
しかし、直接伝えると言うわけではありません。
実際には、SwiftUIのビューの@State変数とバインディングし、UIKitのイベントに対して、バインディングした変数を更新するのがCoordinatorです。
なので、Coordinatorクラス内のイベント処理はバインディングしている変数を変更する処理を行います。
まとめ
- SwiftUIとUIKitでイベントを共有するのがCoordinatorの役割
- Coordinatorクラスには、
「UIKitのビューを格納する変数」
「変数にビューを渡すイニシャライザ」
「イベント処理」
が必要 - makeCoordinatorメソッドで、UIKitのイニシャライザを実行する
前回の記事
終わりに
読んで頂きありがとうございました。
少しでも参考になれば嬉しいです。
分かりにくかった箇所などがありましたら、当ブログもしくはTwitterで教えてください。
出来るだけ分かりやすくなるように努力します。
また、読んでくださると嬉しいです。
では、サラダバー!
コメント