Проблема в том, что UILabel не имеет свойства canTap
. Ваша метка подкласс GridLabel имеет это свойство, но вы не указали, что ваши метки в раскадровке являются экземплярами вашего подкласса меток, поэтому они просто обычные метки.
Другими словами, у вас есть этот код:
@IBOutlet weak var gridLabel0: GridLabel!
@IBOutlet weak var gridLabel1: GridLabel!
@IBOutlet weak var gridLabel2: GridLabel!
@IBOutlet weak var gridLabel3: GridLabel!
@IBOutlet weak var gridLabel4: GridLabel!
@IBOutlet weak var gridLabel5: GridLabel!
@IBOutlet weak var gridLabel6: GridLabel!
@IBOutlet weak var gridLabel7: GridLabel!
@IBOutlet weak var gridLabel8: GridLabel!
var labels = [GridLabel]()
Но вы лжете в каждой из этих строк. Нет ваших ярлыков - это GridLabel. Все они обычные UILabels. Следовательно, как только вы попытаетесь получить доступ к canTap
одного из них, вы получите sh.
В раскадровке выберите девять меток сетки и в Инспекторе идентичности измените их класс на GridLabel. Проблема решена.