[SwiftUI][iOS]UIKitの使い方(2)〜Coordinator(コーディネータ)編〜

SwiftUI

2021/5/27

「SwiftUIでUIKitを使いたい」

「SwiftUIのCoordinator(コーディネータ)って何?」

「Coordinatorの使い方を知りたい」

と言う人に向けて、この記事は書かれています。

どうも、ちょげ(@chogetarou)です。

前回の[SwiftUI][iOS]UIKitの使い方(1)〜ビューの表示〜に引き続き、この記事ではCoordinator(コーディネータ)について解説します。

スポンサーリンク

Coordinator(コーディネータ)とは

コード, プログラミング, ハッキング, Html, Web, データ, デザイン, 開発, プログラム

まず、コーディネータとは、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のイニシャライザを実行する

前回の記事

[SwiftUI][iOS]UIKitの使い方(1)〜ビューの表示〜

2021/5/18

「SwiftUIでUIKitを使いたい」

「SwiftUIでUIKitを使う時には、どうしたらいいの?」

と言う人に向けてこの記事は書かれています。

どうも、ちょげ(@chogetarou)です。

基本的には、SwiftUIのみでiOSアプリを作ることが出来ます。

ですが、どうしてもUIKitを使わなきゃいけない場面が出てきます。

そこで、この記事では、SwiftUIでUIKitを使う方法について解説します。

終わりに

読んで頂きありがとうございました。

少しでも参考になれば嬉しいです。

分かりにくかった箇所などがありましたら、当ブログもしくはTwitterで教えてください。

出来るだけ分かりやすくなるように努力します。

また、読んでくださると嬉しいです。

では、サラダバー!

コメント

タイトルとURLをコピーしました