我为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单元,所以扩展名链接了我的单元而不是原始类