Realm заставляет добавить слово @objc при определении динамических переменных - PullRequest
0 голосов
/ 27 августа 2018

Я сейчас играю с RealmSwift и в учебнике Марина Тодорова он создал переменные, подобные этой, и компилятор не жалуется. realm tutorial image

Но всякий раз, когда я пытаюсьсоздайте эти переменные самостоятельно, компилятор хочет, чтобы я добавил @objc слово compiler error

Это разные вещи или они ведут себя по-разному?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Они разные:

  • @objc означает выставить объект во время выполнения Objective C
  • dynamic означает включение наблюдения значения ключа (KVO) для объекта.

KVO требует времени выполнения Objective-C.

Поведение @ objc-вывода изменилось в Swift 4 (SE-0160)

0 голосов
/ 27 августа 2018

Этот учебник написан в сентябре 2016 года, который довольно устарел.

Раньше считалось, что если у вас есть класс, который подвергается Objective-C, то все его члены подвергаются Objective-C. В Swift 4 вещи, которые не отмечены @objc, не подвергаются Objective-C, независимо от того, является ли он членом класса @objc.

Realm должен делать динамические вещи в ваших свойствах, например, KVO. Вот почему dynamic необходимо. Но dynamic - это функция, эксклюзивная для вещей, которые выставлены Objective-C, поэтому вам нужно @objc.

Именно поэтому Realm не может обрабатывать опционы Swift, потому что они не могут быть соединены с Objective-C. Вы должны использовать RealmOptional<T>.

Короче, просто добавьте @objc к вашим свойствам, и все будет хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...