У меня есть SomeViewController
с одной кнопкой на виде. В didLoad
я добавляю метод из объекта в качестве обработчика касания кнопки следующим образом:
class SomeViewController: UIViewController {
func didLoad() {
// ...
let x = X()
button.addTarget(self, action: #selector(x.test),
for: UIControl.Event.touchUpInside)
// ...
}
class X {
@objc func test(sender:UIButton) {
// ...
}
}
@objc func test(sender:UIButton) {
// ...
}
}
Я новичок в Свифте и не имею опыта работы с Objective-C. Но когда я проверил это прикосновение к кнопке под названием SomeViewController.test
, это нарушило мое понимание языков программирования. Для меня это выглядит как ошибка.
После удаления SomeViewController.test
нажатие кнопки вызвало исключение:
2019-03-07 13: 07: 25.737090 + 0200 myProgram [13570: 283951]
- [myProgram.SomeViewController testWithSender:]: нераспознанный селектор отправлен в экземпляр 0x7fbcc9d174d0 2019-03-07
13: 07: 25.745918 + 0200 myProgram [13570: 283951] *** Завершение работы приложения из-за
необработанное исключение 'NSInvalidArgumentException', причина:
'- [myProgram.SomeViewController testWithSender:]: не распознано
селектор отправлен на экземпляр 0x7fbcc9d174d0 '
Каков принцип подписки на событие с помощью оболочки #selector
?
Как подписать метод на нажатие кнопки вне класса, который содержит этот метод? Если это невозможно - почему?
Свифт 4.2