「依存性逆転の原則」をご存知だろうか。
この原則によって、我々が多数のオブジェクトを疎結合で組み込み、必要に応じて置き換えることが可能になった。そして 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 と依存性逆転の原則を両立できるだろうか…
このトークは、その可能性を探っていく。