【发布时间】:2018-09-13 12:43:21
【问题描述】:
我正在使用泛型函数来改进 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,它会正确注册Nib。
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 并且在某些时候我当然崩溃了,因为它找不到单元格。
你有什么建议吗? 非常感谢。
【问题讨论】:
标签: swift uitableview generics metatype