泛型单元格getter函数的UICollectionViewCell问题

时间:2019-01-10 11:29:53

标签: ios swift generics uicollectionview extension-methods

我为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)

没有问题...

但在ui集合视图中

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
    }
}

我收到警告说

  

从“ UICollectionViewCell”投射到不相关的类型“ T”总是失败

如果我尝试将此功能用于

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell

xcode给出错误提示

  

类型'UILocationDetailsViewController'不符合协议'UICollectionViewDataSource'

更新: 这是我的错误,我有一个名为UICollectionViewCell的tableview单元,所以扩展名链接了我的单元而不是原始类

0 个答案:

没有答案