я написал класс расширения для uitableview
extension UITableView {
func register(_ cellsName : String)
{
self.register(UINib.init(nibName: cellsName, bundle: nil), forCellReuseIdentifier: cellsName)
}
func cell<T>(for index: IndexPath) -> T where T: UITableViewCell {
if let dict = value(forKey: "_nibMap") as? [String: UINib],dict.keys.contains(String(describing: T.self)) { } else {
register(String(describing: T.self))
}
return self.dequeueReusableCell(withIdentifier: String(describing: T.self), for: index) as! T
}
}
и я бы сделал
let tempCell: UITempCell = tableview.cell(indexPath)
, который работает без проблем ...
, но в случае просмотра пользовательского интерфейса
extension UICollectionView {
func register(_ cellsName : String)
{
self.register(UINib.init(nibName: cellsName, bundle: nil), forCellWithReuseIdentifier: cellsName)
}
func cell<T>(for index: IndexPath) -> T where T: UICollectionViewCell {
if let dict = value(forKey: "_nibMap") as? [String: UINib],dict.keys.contains(String(describing: T.self)) { } else {
register(String(describing: T.self))
}
return self.dequeueReusableCell(withReuseIdentifier: String(describing: T.self), for: index) as! T
}
}
я получаю предупреждение: 1012 *
Преобразование из UICollectionViewCell в несвязанный тип T всегда завершается неудачей
и если я попытаюсь использовать эту функцию для
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
xcode дает сообщение об ошибке
Тип 'UILocationDetailsViewController' не соответствует протоколу 'UICollectionViewDataSource'
Обновление:
это была моя ошибка, у меня была ячейка таблицы с именем UICollectionViewCell, поэтому расширение связывало мою ячейку вместо исходного класса