- Что такое @objc
вывод? Что здесь происходит?
В Swift 3
, компилятор выводит @objc
в нескольких местах, так что вам не придется. Другими словами, это обязательно добавит @objc
для вас!
В Swift 4
, компилятор больше не делает это (так много). Теперь вы должны добавить @objc
явно.
По умолчанию, если у вас есть проект до Swift 4, вы получите предупреждения об этом. В проекте Swift 4 вы получите ошибки сборки. Это контролируется SWIFT_SWIFT3_OBJC_INFERENCE
настройкой сборки. В проекте до Swift 4 это установлено на On
. Я бы порекомендовал установить это значение Default
(или Off
), которое теперь является параметром по умолчанию для нового проекта.
Конвертация всего займет некоторое время, но поскольку это Swift 4 по умолчанию, его стоит сделать.
Я могу остановить предупреждения / ошибки компилятора?
Существует два способа преобразования вашего кода, чтобы компилятор не жаловался.
Один из них - использовать @objc
каждую функцию или переменную, которые должны быть доступны среде выполнения Objective C:
@objc func foo() {
}
Другой заключается в использовании @objcMembers
по Class
декларации. Это гарантирует автоматическое добавление @objc
ко ВСЕМ функциям и переменным в классе. Это простой способ, но он имеет свою стоимость, например, он может увеличить размер вашего приложения, предоставляя функции, которые не нужно показывать.
@objcMembers class Test {
}
- Что @objc
и зачем это нужно?
Если вы вводите новые методы или переменные в класс Swift, пометьте их как @objc
выставляющие их для среды выполнения Objective-C. Это необходимо, если у вас есть код Objective C, который использует ваш класс Swift, или если вы используете функции типа Objective C, например Selectors
. Например, шаблон target-action:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- Почему бы мне не отметить все @objc
?
Есть негативы, которые помечаются как @objc
:
- Увеличенный размер двоичного файла приложения
- Нет перегрузки функции
Пожалуйста, имейте в виду, что это резюме очень высокого уровня и что оно сложнее, чем я написал. Я бы порекомендовал прочитать актуальное предложение для получения дополнительной информации.
Источники: