Объявление общей функции выдает ошибку - PullRequest
0 голосов
/ 28 августа 2018

Мне нужно объявить универсальную функцию, которая возвращает универсальную ячейку, для этого я реализовал следующим образом:

private func getVisibleCellAs<Cell>() -> Cell? {
    if let visibleCell = self.registrationTableView.visibleCells.first, let expectedCell = visibleCell as? Cell {
        return expectedCell
    }
    return nil
}

Теперь я называю это

if let personalDetailsCell = self.getVisibleCellAs<PersonalDetailsTableViewCell>() {
            return personalDetailsCell.validatePersonalDetails()
}

Но отображается ошибка (при вызове функции)

Cannot explicitly specialize a generic function

если попытался позвонить.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Swift не позволяет вам вручную указывать универсальные аргументы для передачи в функции, вместо этого они должны быть вычислимы из контекста. У вас есть как минимум три варианта здесь:

  1. объявить тип переменной:

    if let personalDetailsCell: PersonalDetailsTableViewCell = self.getVisibleCellAs() { ... }
    
  2. приведите результат:

    if let personalDetailsCell = self.getVisibleCellAs() as PersonalDetailsTableViewCell { ... }
    
  3. если результат передается другой функции, компилятор должен иметь возможность сделать вывод, что:

    func configure(personCell cell: PersonalDetailsTableViewCell) { ... }
    // later on
    configure(personCell: self.getVisibleCellAs())
    
0 голосов
/ 28 августа 2018

Вы не можете явно специализировать универсальную функцию, подобную этой.

Но вы можете сделать это так:

if let personalDetailsCell: PersonalDetailsTableViewCell = self.getVisibleCellAs() {
    return personalDetailsCell.validatePersonalDetails()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...