[SwiftUI] UITableViewなどのUIコンポーネントの実体を取得するOSS

Updated
Dec 1, 2019 9:55 AM
Created
Dec 1, 2019 9:46 AM
Tags
SwiftUI.frameworkBookmark
Keywords

SwiftUIはViewを宣言してSwiftUIランタイムに実体を構築してもらうアプローチなので、 内部的にUIViewを使っていたとしてもその実態に触れることは原則できない。

Reactだと ref としてDOM Elementが取得できるが、SwiftUIには存在しない。

そんなことをSwiftUIでも行いたいというニーズから生まれたOSSがこちら

次のようにModifierを通してListが使用する実体であるUITableViewをclosureの引数で取得できている。

List {
    Text("Item 1")
    Text("Item 2")
}
.introspectTableView { tableView in
    tableView.separatorStyle = .none
}

感想としては、便利であり、現状必要不可決なものであるが、宣言的UIフレームワークのメリットとして、「なにをしたいか」だけを開発者に訪ね、「どうやって実現するか」を隠蔽できることがある。

これにより、SwiftUIランタイムは開発者へ変更を依頼することなく、UIパフォーマンスを向上させることができる。

とはいえ、SwiftUIの現状の機能ではこれはやるしか無いですよねー。