LoginSignup
12
10

More than 3 years have passed since last update.

[30秒で理解]SwiftでDI(Dependency Injection)

Posted at

最近、少しばかりKotlinでAndroid開発をしているときにSwift以上にKotlinの方がDIの文化が進んでそうだな(主にDaggerとか)と思ったんですが、意外とちゃんと時間をとってSwiftのDIについて調べていないなと思ったので時間をとって記事にした次第です。

Dependency Injectionとは

名前の格好良さとか複雑さに惑わされて欲しくはないので言いますが、

ただ外部から値を渡して上げて受け取った物(主にclass)は受け取ったことを前提に記述することできる

ただそれだけです。

実際にcodeに起こしたときはこんな感じです。

class Hoge {
    var name: String

    init(name: String) {
        self.name = name
    }
}
let hoge = Hoge(name: "hogehoge")

これが一番シンプルなDIと言えると思います。DIってなんだろうと思って検索した場合は、これは当たり前のことだし、これをDIっていうの思った人も少なくないと思います。ライブラリを使うとコンテナとかファクトリとかいろいろな単語が出てきて混乱するかもしれませんが、DIという手法をより有効的に使用するための要素でその手法本体ではありません。

それでもまだ信じられない人はこの記事をみてみることを推奨します

この記事は以前私が書いた物ですが、UITableViewを使うときにUITableViewCelldequeue(呼び出す)するタイミングでパラメータを挿入しているだけです。上のサンプルコードでもnameを挿入しているのと同様です。

しかし、これだけではおわりません。いまの説明で完全に理解するにはDIのDの方、Dependencyへの理解が不十分です。ここでいうDependencyとはSingletonであると考えて良いです。

Singletonについて

Singletonとはその物(class, protocol)が実行時に一つのオブジェクトにのみ依存することを約束することです。ここでSwiftにおいてSingletonを約束するために必要なのがコンテナという概念です。これ以上深く話すには実際にDIのライブラリ等でDIのコンテナの解釈のもと、ライブラリが作られているかで少し変わってきます。思想の問題です。

Swiftで書かれているDIのライブラリ

コンテナを用いる場合

コンテナを用いない場合

その他(injectionが綺麗にかけるライブラリ)

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10