我正在使用泛型函数改进tableView单元格,如下所示;
public func registerNib<T: UITableViewCell>(_:T.Type) {
print("Registering.....")
print(T.self)
let nib = UINib(nibName: String(describing: T.self), bundle: nil)
register(nib, forCellReuseIdentifier: String(describing: T.self))
}
我写了两个函数来注册单元格,一个用于单个单元格,一个用于多个单元格。
//单单元寄存器
func setup<T: UITableViewCell>(cell:T.Type) {
print(cell)
tableView.registerNib(cell)
self.setupParameters(.....)
}
//多单元寄存器
func setup<T: UITableViewCell>(cells:[T.Type]) {
for cell in cells {
print(cell)
tableView.registerNib(cell)
}
self.setupParameters(.....)
}
对于单单元实现,可以如下调用func,它将正确注册。
self.baseTableView.setup(cell: CompetencyCell.self, rowHeight: 60)
**************
Output:
CompetencyCell
Registering...
CompetencyCell
但问题是在多个实现中出现的;
self.baseTableView.setup(cells: [CompetencyCell.self, BehaviorCell.self], rowHeight: 60)
**************
Output:
CompetencyCell
BehaviorCell
Registering...
UITableViewCell
UITableViewCell
我真的很想知道是什么原因,还是我错过了什么?这看起来是相同的行为,但是当我想将T.Type值传递给RegisterNib方法时,它会变成UITableViewCell,当然,在某个时间点之后,我会崩溃,因为它找不到单元格。
你有什么建议吗?
谢谢。