У мене є бібліотека Swift, на яку дуже залежать obj.valueForKey()
від NSObject
.
Після переходу на Swift 4 я виявив, що ці виклики завжди виходять з ладу з помилкою "цей клас не є ключовим значенням, кодовим сумісним для ключа ...", якщо властивість, яку я шукаю, не оголошена з @objc
.
Чи обов'язково декларувати властивості за допомогою @objc
їх можна знайти за допомогою цього методу? Чи є альтернатива?
Відповіді:
45 за відповідь № 1Коли ви виконували міграцію, про яку запитували Xcode @objc
висновок, і ви, ймовірно, вибрали новий тип замість Swift3.
Можливі рішення:
Використовуйте @objc
по кожному методу, за потреби замість цілого класу.
Використовуйте @objcMembers
Ви могли б просто використовувати @objcMembers
на занятті.
Застосування атрибута @objcMembers до класу неявно додає атрибут @objc до всіх його членів, сумісних з Objective-C.
Написання швидких класів та протоколів з поведінкою Objective-C
Запам'ятати: оскільки застосування атрибута @objc може збільшити розмір складеного додатка і негативно вплинути на ефективність, застосовувати атрибут @objcMembers лише в деклараціях, коли кожному члену потрібно застосувати атрибут @objc.
Переключіть умовивід на стару поведінку
Ви також можете змінити поведінку проекту в межах:
Build Settings
> Swift 3 @objc Inference
> On
/Off
Схожі запитання:
- Використання виводу Swift 3 @objc у режимі Swift 4 застаріле?
- Як я можу впоратися з припиненням виводу @objc за допомогою #selector () у Swift 4?