Проблема в том, что в вашем определении свойства tap
, self
не является экземпляром пользовательского класса ячейки, потому что на момент создания свойства объект не был полностью инициализирован.
Если вы добавите:
print(type(of: self))
к этому коду, вы увидите, что он печатает:
(CustomCell) -> () -> CustomCell
вместо желаемого:
CustomCell
Такваша цель / действие использует неправильную цель.
Простой способ исправить это - tap
a lazy var
:
lazy var tap: UITapGestureRecognizer = {
let t = UITapGestureRecognizer(target: self, action: #selector(tapped))
return t
}()
Затем при первом обращении к tap
, будет создан распознаватель жестов касания, и в это время будет создана ваша пользовательская ячейка, и self
будет ссылаться на экземпляр класса.
В качестве альтернативы, вы можете сделать tap
a вычисляемое свойство :
var tap: UITapGestureRecognizer {
let t = UITapGestureRecognizer(target: self, action: #selector(tapped))
return t
}
и tap
создадут и вернут UITapGestureRecognizer
при обращении к нему.Опять же, в этом случае пользовательская ячейка будет создана, поэтому self
будет правильно ссылаться на экземпляр класса.