👏

Swift delegateで依存逆転の法則を再現

2023/08/20に公開

https://qiita.com/natya/items/326bd50a78cf34371169

  • 下記サンプルコードによって、 たとえば取得するデータをQiitaAPIからZennAPIに変更することが容易になる。

サンプルコード

protocol ApiRepository {
    func getApiListInfo()
}

// ボタンのクラス
struct Button {
    var delegate: ApiRepository

    func tap() {
        delegate.getApiListInfo()
    }
}

// ボタンの処理を行うクラス
class QiitaApiRepository: ApiRepository {
    func getApiListInfo() {
        print("Qiitaからデータを取得した")
    }
}

// メインの処理
func main() {
    let button = Button(delegate: QiitaApiRepository())

    // ボタンをタップするとハンドラの処理が実行される
    button.tap()
}

// メイン処理を呼び出す
main()


残todo

  • weakがprotcolを使用する際によく見られるが、使い方がわからない。
  • main関数でQiitaApiRepositoryをインスタンス化しているが、別の場所で呼び出すことはSSOTの考え方に反する。FlutterのRiverpodのProviderのような使い方がないか調査

Discussion