SwiftUI で「依存性逆転の原則」を見つめ直す by 星野恵瑠

iOSDC Japan 2020
レギュラートーク(20分)

SwiftUI で「依存性逆転の原則」を見つめ直す

lovee 星野恵瑠 lovee
2

「依存性逆転の原則」をご存知だろうか。

この原則によって、我々が多数のオブジェクトを疎結合で組み込み、必要に応じて置き換えることが可能になった。そして Swift の世界で言えばこれはズバリ「protocol」によって実現されたものである。

ところで SwiftUI の登場により、物事が少し変わった。

SwiftUI はこれまで通り protocol に大きく依存している。View protocol を見ればわかる。しかし同時に、SwiftUI は同じくらい Property Wrapper に大きく依存している。@State、@ObservedObject や @EnvironmentObject の他に、今年は更に @StateObject も加わった。SwiftUI はキーコンセプトの一つとして「Source of Truth」があり、これらの Property Wrapper はそのコンセプトの実装に切っても切れないものだ。

ここで問題が発生する:残念ながら、protocol に Property Wrapper の宣言ができないのだ。つまり Property Wrapper を持つオブジェクトは、そのまま protocol で抽象化できないのだ。

SwiftUI は簡潔な「宣言的 UI」を可能にしてくれた強力なツールだ。おかげで一つのアプリは最短 1 ツイートに収まるくらいシンプルなものになった。今後のトレンドも間違いなく SwiftUI だろう。しかし残念ながらこの Property Wrapper の抽象化で protocol 使えない問題が依然として残っている。

果たして、SwiftUI と依存性逆転の原則を両立できるだろうか…

このトークは、その可能性を探っていく。