/ / Swift 4 "Цей клас не відповідає ключовому значенню кодування сумісним" - ios, swift, xcode, swift4

Swift 4 "Цей клас не відповідає кодуванні ключового значення" - ios, swift, xcode, swift4

У мене є бібліотека 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

Схожі запитання: