无法使用类型为“”的参数列表调用“*”- 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])