- Що таке @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. Наприклад, схема цільової дії:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- Чому я б не відзначив усе @objc?
Є негативи, які позначають щось як @objc:
- Збільшений розмір бінарних програм
- Немає функцій перевантаження
Будь ласка, майте на увазі, що це резюме дуже високого рівня і що воно складніше, ніж я писав. Я рекомендую прочитати фактичну пропозицію для отримання додаткової інформації.
Джерела: