Swift 4 “Этот class не соответствует кодированию ключевого значения”

У меня есть библиотека Swift, которая сильно зависит от obj.valueForKey() от NSObject .

После перехода на Swift 4 я обнаружил, что эти вызовы всегда вылетают с ошибкой «этот class не является ключевым значением, совместимым с кодировкой для ключа …», если свойство, которое я ищу, объявлено с помощью @objc .

Обязательно ли объявлять свойства с помощью @objc для их @objc с помощью этого метода? Есть ли альтернатива?

Когда вы выполнили миграцию, Xcode спросил о @objc и вы, вероятно, выбрали новый тип вместо Swift3.

Возможные решения:

Использовать @objc

Используйте @objc для каждого метода, если это необходимо, а не для всего classа.

Использовать @objcMembers

Вы могли бы просто использовать @objcMembers в classе.

Применение атрибута @objcMembers к classу неявно добавляет атрибут @objc ко всем членам, совместимым с Objective-C.

Написание быстрых classов и протоколов с поведением Objective-C

Имейте в виду: поскольку применение атрибута @objc может увеличить скомпилированный размер приложения и неблагоприятно повлиять на производительность, примените атрибут @objcMembers к объявлениям, когда каждый член должен иметь атрибут @objc .

Переключение вывода на прежнее поведение

Вы также можете изменить поведение проекта в: Build Settings > Swift 3 @objc Inference > On / Off

Связанные вопросы:

  • Использование вывода Swift 3 @objc в режиме Swift 4 устарело?
  • Как я могу справиться с дефолтом вывода @objc с помощью #selector () в Swift 4?
  • Запуск xcodebuild с разветвленного терминала
  • Может ли iPhone приложение блокировать телефонные звонки?
  • Подавление устаревших предупреждений в Xcode
  • Что такое ошибка связи: OS_xpc_error в Xcode 6?
  • Ошибка «Неизвестный class в файле Interface Builder» во время выполнения
  • iphone: Где находится файл .dSYM в отчете о сбое
  • Приложение Xcode 4.6.2 сбой при каждом втором запуске
  • Добавление неизвестного количества строк в «Статические ячейки» UITableView
  • iOS - странная ошибка при тестировании на симуляторе
  • Загрузите и установите версию Xcode 10 без учетной записи разработчика Premium
  • React Native / Xcode Upgrade и теперь RCTConvert.h не найден
  • Давайте будем гением компьютера.