Я определил протокол следующим образом:
protocol CustomCell where Self: UICollectionViewCell {
associatedType Config
var cellConfiguration: Config!
func setup(with configuration: Config)
}
Затем у меня есть пользовательский UICollectionViewCell:
class RedCollectionViewCell: UICollectionViewCell, CustomCell {
var cellConfiguration: RedCollectionViewCellConfiguration!
func setup(with configuration: Config) {
...
}
...awakeFromNib and other functions...
}
, где RedCollectionViewCellConfiguration
определено:
class RedCollectionViewCellConfiguration: NSCoding {
...
}
Конечная цель состоит в том, чтобы иметь много различных настраиваемых UICollectionViewCell, которые все соответствуют CustomCell, каждый из которых определяет свой собственный класс конфигурации (поскольку для каждого типа настраиваемой ячейки представления коллекции потребуется другая конфигурация, поскольку они будут содержать разные типы данных). Я планирую сохранить конфигурацию ячейки в Core Data, а затем получить ее в ViewController.collectionView(_:cellForItemAt:)
. В ViewController.collectionView(_:cellForItemAt:)
я пытаюсь сделать это:
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)
if let cell = cell as? CustomCell {
cell.setup(tile,with: configuration)
}
и в результате понижающего преобразования получаю следующую ошибку: Протокол CustomCell можно использовать только как общий c, потому что у него есть требования к типу Self или связанному типу
Я видел другие ответы на Stack Overflow, но ни один из них не помог. Есть ли альтернативный способ решения этой проблемы? Я рассмотрел вариант исключения connectedType & cellConfiguration в CustomCell, но было бы идеально, если бы все соответствующие типы имели уникальный класс конфигурации.