今年もiOSDCで話をしてきました。

宣言的UICollectionViewと呼んでいるものは、UICollectionViewのコンテンツを表示と同じ構造で定義するものです。以下の画像は定義のコードと表示結果の例で、青い四角は対応関係を示しています。

話した内容はライブラリにまとめてDataSourceKitとして公開しました。

背景などの補足

「複数の種類のセルがあるUICollectionViewの実装は難しい」という問題意識もあってこの開発に取り組んでいたのですが、開発に踏み切れたのはAndroidアプリ開発での成功体験による影響が大きいです。今のプロジェクトのAndroidアプリ開発では、同様の仕組みを実現するEpoxyというライブラリを使っていて、この手法が上手くいくものだという共通認識がチーム内にはありました。

形だけ真似するのは性に合わないので、既存の問題点と新しい手法の関係を整理して、最小限の実装にすることを目指しました。結果、Epoxyが解決している問題のうち「複数の種類のセルがあるUICollectionViewの実装は難しい」だけを解決する形のコードに辿り着くことが出来ました。また、Epoxyは解決していないものの自分は解決したかった問題である「複数の種類のセルがあるUICollectionViewのコンテンツのテストは難しい」も解決できるようになりました。

Epoxyは差分更新の仕組みでパフォーマンスの問題も解決しているのですが、これについてはDifferenceKitなどの差分ライブラリと組み合わせれば解決できるような気がしているので、後ほど試してみようと思います。

ライブラリ化

この仕組みで重要なのはアイディアであって、実装は別になくてもいいかなと思っていました。振り返ってみるとAPIKitも同様の構造になっているのですが、ライブラリとしての実装があったからアイディアに触れる人が増えたのかもしれないなと思い、やっぱりライブラリとして提供することにしました。

リンク

iOSDCの感想

自分が深く知らない話をたくさん聞けたので、お得だなと思いました。それと、日頃抱えている同じ問題に対しても、自分がやってこなかったアプローチの話も聞けるというのもお得なポイントでした。やっぱり年に1度くらいこういう機会があると良いなと思います。

それと、自分が過去に書いたライブラリや書籍の感想を伝えてくれた方も何名かいて、今後も色々がんばっていこうと思いました。まずはiOS 12 Programmingが無事に出版されるようにがんばります。