UICollectionViewCell проблема с универсальной функцией получения ячеек - PullRequest
0 голосов
/ 10 января 2019

я написал класс расширения для 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, поэтому расширение связывало мою ячейку вместо исходного класса

...