Я пытаюсь преобразовать исходный код своего проекта из Swift 3 в Swift 4. Одно предупреждение, которое дает мне Xcode, касается моих селекторов.
Например, я добавляю цель к кнопке, используя обычный селектор вроде этого:
button.addTarget(self, action: #selector(self.myAction), for: .touchUpInside)
Это предупреждение, которое он показывает:
Аргумент '#selector' относится к методу экземпляра 'myAction ()' в 'ViewController', который зависит от вывода атрибута '@objc', устаревшего в Swift 4
Добавьте '@objc', чтобы предоставить этот метод экземпляра Objective-C
Теперь нажатие Fix
на сообщение об ошибке делает это с моей функцией:
// before
func myAction() { /* ... */ }
// after
@objc func myAction() { /* ... */ }
Я действительно не хочу переименовывать все свои функции, чтобы включить @objc
метку, и предполагаю, что в этом нет необходимости.
Как мне переписать селектор, чтобы справиться с устареванием?
Связанный вопрос:
@objc
? Это немного раздражает, но я обычно делаю эти функции закрытыми, требуя от меня пометить их как в @objc
любом случае.
@objcMembers
для того, чтобы предоставить Obj-C все совместимые с Obj-C члены, но я бы не советовал этого делать, если вам действительно не нужно, чтобы весь ваш класс был открыт.
@objc
это теперь необходимо для того , чтобы подвергнуть их Obj-C, и , следовательно , использовать с селекторов.