, если вы хотите настроить многократно используемую ячейку с генериками, это один простой режим:
Первый
настроить универсальную ячейку, в этом примере требуется только один аргумент, но вы можете делать все, что захотите
class GenericCollectionViewCell<U>: UICollectionViewCell {
var item: U!
}
Секунда
создать UIViewController
, который принимает вашу общую ячейку
class GenericViewController<T: GenericCollectionViewCell<U>, U>: UIViewController, UICollectionViewDelegate {
var items: [U] = []
fileprivate let cellReuseIdentifier = "GenericCollectionViewCell"
override func viewDidLoad() {
collectionView.register(T.self, forCellWithReuseIdentifier: cellReuseIdentifier)
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellReuseIdentifier, for: indexPath) as? GenericCollectionViewCell<U> else { return UICollectionViewCell() }
cell.item = items[indexPath.item]
return cell
}
}
Третий
создает подкласс для вашей общей ячейки и выполняет все ваши настройки
class MySublclassedCollectionViewCell: GenericCollectionViewCell<Whatever> {
override var item: Whatever! { // see that item becomes of type Whatever
didSet {
// setup your cell from here
}
}
}
Окончательный
подкласс GenericViewController
иработа выполнена
class SublcassedViewController: GenericViewController<GenericCollectionViewCell, Whatever> {
override func viewDidLoad() {
super.viewDidLoad()
self.items = // setup items
}
}