Невозможно вызвать '*' со списком аргументов типа '' - проблема с Generics Swift - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть универсальный метод, который принимает массив UITableviewCells для регистрации для tableView.Когда я пытаюсь зарегистрироваться, выдается следующее сообщение об ошибке

Невозможно вызвать 'register' со списком аргументов типа '(nibs: [UITableViewCell.Type])'

Все ячейки UITableview, которые я пытаюсь зарегистрировать, соответствуют протоколу с именем 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])
  • Эта строка всплываетошибка 'Не удается вызвать' register 'со списком аргументов типа' (nibs: [UITableViewCell.Type]) ''

--- Edited ---

Но одна и та же функция не выдает никакой ошибки, если обе ячейки принадлежат одному и тому же классу

tableView.register(nibs: [CellOne.self, CellOne.self])

Чего мне здесь не хватает?Любая помощь будет высоко ценится

Заранее спасибо.

1 Ответ

0 голосов
/ 27 февраля 2019

Вам не нужны генерики для этого.Вы можете просто использовать 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])
...