无法使用类型为“”的参数列表调用“*”- Swift 泛型问题
Cannot invoke '*' with an argument list of type '' - Issue with Swift Generics
我有一个通用方法,它接受一个 UITableviewCells 数组来注册一个 tableView。当我尝试注册时出现以下错误
无法使用类型为“(nibs: [UITableViewCell.Type])”[=45= 的参数列表调用 '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([=12=].self, cellName: [=12=].identifier) }
}
}
我的实现如下:
class CellOne: UITableViewCell, ReusableCell {}
class CellTwo: UITableViewCell, ReusableCell {}
tableView.register(nibs: [CellOne.self, CellTwo.self])
- 上面这行弹出错误“无法使用类型为‘(nibs: [UITableViewCell.Type])”的参数列表调用 'register'''
---已编辑---
但如果两个单元格相同,则相同的函数不会抛出任何错误class
tableView.register(nibs: [CellOne.self, CellOne.self])
我在这里错过了什么?任何帮助将不胜感激
提前致谢。
你不需要泛型。您可以只使用 ReusableCell.Type
。您也不需要 [=12=].self
因为 [=13=]
已经是 Type
extension UITableView {
func register(nibs: [ReusableCell.Type]) {
nibs.forEach { self.register([=10=], forCellReuseIdentifier: [=10=].identifier) }
}
}
class CellOne: UITableViewCell, ReusableCell {}
class CellTwo: UITableViewCell, ReusableCell {}
let tableView = UITableView()
tableView.register(nibs: [CellOne.self, CellTwo.self])
我有一个通用方法,它接受一个 UITableviewCells 数组来注册一个 tableView。当我尝试注册时出现以下错误
无法使用类型为“(nibs: [UITableViewCell.Type])”[=45= 的参数列表调用 '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([=12=].self, cellName: [=12=].identifier) }
}
}
我的实现如下:
class CellOne: UITableViewCell, ReusableCell {}
class CellTwo: UITableViewCell, ReusableCell {}
tableView.register(nibs: [CellOne.self, CellTwo.self])
- 上面这行弹出错误“无法使用类型为‘(nibs: [UITableViewCell.Type])”的参数列表调用 'register'''
---已编辑---
但如果两个单元格相同,则相同的函数不会抛出任何错误class
tableView.register(nibs: [CellOne.self, CellOne.self])
我在这里错过了什么?任何帮助将不胜感激
提前致谢。
你不需要泛型。您可以只使用 ReusableCell.Type
。您也不需要 [=12=].self
因为 [=13=]
已经是 Type
extension UITableView {
func register(nibs: [ReusableCell.Type]) {
nibs.forEach { self.register([=10=], forCellReuseIdentifier: [=10=].identifier) }
}
}
class CellOne: UITableViewCell, ReusableCell {}
class CellTwo: UITableViewCell, ReusableCell {}
let tableView = UITableView()
tableView.register(nibs: [CellOne.self, CellTwo.self])