iOSDC Japan 2018に出していたプロポーザルが採択されたので、話します。

このトークでは、「複数のセルが混在するUICollectionViewの実装が複雑になってしまう」という問題を解決するために、「宣言的にコンテンツを定義する」というアプローチを取り入れたらどうか、というところから話を始めます。

こういう感じです。

func buildModels(data: Data) {
    cell(.header(title: data.title))

    for item in data.items {
        cell(.item(item))
    }

    cell(.footer(updatedAt: data.updatedAt))
}

抽象的な話なのですが、実装のアプローチを変えると、物事に掛かるコストの構造が変わります。コストというと「実装のコスト」と捉えてしまいがちですが、「テストのコスト」や「パフォーマンスチューニングのコスト」についても同じことが言えます。したがって、プロジェクトに新たなアプローチを取り入れる際には、優先するメリットと許容するデメリットを決め、それらを満たせるコストの構造を持っているのかきちんと評価することが重要です。

トークの中では「UICollectionViewのコンテンツを宣言的に定義する」というアプローチを取り入れることで、コストの構造がどのように変化するのか説明します。そして、このアプローチがどのような状況で役に立ち、どのような状況で困るのか紹介します。

今回はあくまでUICollectionViewの話に終始しますが、似たような状況はあらゆる箇所に生じるので、一般的な問題に通じる話題です。例えば「RxSwiftをプロジェクトに導入すべきか」という議論をする時にも、同様の評価をすることになるのではないかと思います。

会場で色々と意見を交換できたらいいなと思っているので、是非聞きに来てください。