UICollectionViewにますます多くのセルタイプを追加する一方で、コードを維持するのが難しいことに気付きました。したがって、新しい機能を追加しながらコードを変更すべきではないという原則に従えば、新しいコードを追加する必要があります。UICollectionViewのスイッチを持たないデキュー再利用可能なセル
例から始めましょう。
私たちは、このようなデータモデルがあります:
protocol Animal {}
class Dog: Animal {}
class Duck: Animal {}
をそして、我々は適切な2個のセルがある - DogCell
とDuckCell
を。
多くのチュートリアルによると、私たちは今、私たちはCat
モデルに基づいCatCell
ある別のセルを追加したいUICollectionViewDataSource
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let animal = self.animals[indexPath.row]
if let dog = animal as? Dog {
return collectionView.dequeueReusableCell(withReuseIdentifier: "DogCell", for: indexPath)
} else if let duck = animal as? Duck {
return collectionView.dequeueReusableCell(withReuseIdentifier: "DuckCell", for: indexPath)
}
return UICollectionViewCell()
}
から機能的にこのような何かを実装することができます。
コードをきれいにするために別のelse if
を追加することは悪い習慣なので、iOSでどのように行うのですか?そのための良いデザインパターンはありますか? Objective-Cコードも高く評価されます。
私は、else-ifステートメントを使用すると実際には(おそらく最も簡単な)方法だと言います。それについて考えるなら、問題はelse-if文を追加することではなく、もっと多くのクラスを追加することだと思います。クラスを追加するほど、より多くのカスタムセルを設計する必要があります。 else-ifステートメントは、このコードの使用の兆候です。 –
私はそれがクリーンなコードの良い習慣だとは思わない。 collectionViewメソッドでこのようなif-else文が多数ある大きなプロジェクトの例はありますか? – Tajnero