🐍 Swift VIPERとは?

VIPERとは

ViewInteractorPresenterEntityRouterの略語。 iOSアーキテクチャ

VIPER 公式サイト

VIPER 公式サイト(和訳) Qiita@YKEI_mrn

それぞれの役割

項目 役割
View 画面更新・Presenterへのイベント通知
Intractor ビジネスロジックPresenterから依頼されたビジネスロジックを行い結果を返す・API通信
Presenter Viewから受け取ったイベントを元に別のクラスに依頼
Entity structでデータ構造の定義
Router 画面遷移

Viewについて

  • 画面更新
  • Presenterへのイベント通知

を行う。

UIViewUIViewControllerViewに該当する。 "見た目"と"ユーザー操作"を受け付け、MVCモデルのVCに当たる。

画面更新

テキストラベルの内容変更や、テーブルビューの再読み込みなど

Presenterへのイベント通知

ライフサイクル(viewDidLoad()viewWillAppear())など)の通知、ボタンのタップやセルのタップの通知

ライフサイクルについてはこちらで紹介しています。 https://zenn.dev/lucas07s/books/pglang-swift/viewer/lifecycle

Interactorについて

を行う。

単一の責任を意識する。

import UIKitは禁止。 UIがどういう状態かは気にしない。

Presenterについて

  • Viewから受け取ったイベントをもとに別のクラスに依頼(中継役)
    1. Viewに対して画面更新を依頼
    2. Interactorに対してデータの取得を依頼
    3. Routerに対して画面遷移を依頼

を行う。

お客さんからオーダーを聞き、シェフに伝える。 出来上がった料理をお客さんへ提供する。 Presenterはレストランのウェイター。

Presenterが提供するメソッド名は、viewDidLoad()loginButtonDidPush()といった命名をする。

import UIKitは禁止。 UIがどういう状態かは気にしない。

Entityについて

  • structでデータ構造の定義
    • = データそのもの
    • 基本的にプロパティとイニシャライザのみ定義し、ロジックは持たせない

を行う。

Routerについて

  • 画面遷移

を行う。

それぞれの関係

VIPER 公式サイトから引用

命名

プロトコル インスタンス
View {Name}View {Name}ViewController
Interactor {Name}Usecase {Name}Interactor
Pressenter {Name}Presentation {Name}Presenter
Entity 不要 {Name}
Router {Name}Wireframe {Name}Router