我有一个通用方法,该方法接受UITableviewCells数组来注册tableView。当我尝试注册时,出现以下错误
不能使用类型为((nibs:[UITableViewCell.Type]))'的参数列表调用'register'
我要注册的所有UITableviewCells都符合名为ReusableCell
的协议
协议如下:
protocol ReusableCell: class { static var identifier: String { get }}
extension ReusableCell where Self: UIView {
static var identifier: String {
return String(describing: self)
}
}
通用方法如下:
extension UITableView {
func register<T: UITableViewCell>(nibs: [T.Type]) where T: ReusableCell {
nibs.forEach { register($0.self, cellName: $0.identifier) }
}
}
我的实现方式如下:
class CellOne: UITableViewCell, ReusableCell {}
class CellTwo: UITableViewCell, ReusableCell {}
tableView.register(nibs: [CellOne.self, CellTwo.self])
---已编辑---
但是如果两个单元格属于同一类,则相同的函数不会引发任何错误
tableView.register(nibs: [CellOne.self, CellOne.self])
我在这里想念什么?任何帮助将不胜感激
谢谢。
答案 0 :(得分:4)
您不需要泛型。您可以只使用ReusableCell.Type
。您也不需要$0.self
,因为$0
已经是Type
extension UITableView {
func register(nibs: [ReusableCell.Type]) {
nibs.forEach { self.register($0, forCellReuseIdentifier: $0.identifier) }
}
}
class CellOne: UITableViewCell, ReusableCell {}
class CellTwo: UITableViewCell, ReusableCell {}
let tableView = UITableView()
tableView.register(nibs: [CellOne.self, CellTwo.self])