I find myself doing this repetitive code a lot, when I have different kinds of cells. Is there a way to DRY it up? Or is it as good as it could be. 

```
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        switch cells[indexPath.item].type {
        case .aCell:
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ACellID, for: indexPath) as! ACell
            cell.data = somedata
            return cell
        case .bCell:
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: BCellID, for: indexPath) as! BCell
            cell.data = somedata
            return cell
        case .cCell:
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CCellID, for: indexPath) as! CCell
            cell.data = somedata
            return cell 
        }
    }

```

I am thinking to have all cells adopt a `protocol` and put them in an array