В настоящее время я работаю над протоколами для моих объектов, которые наследуются от Realm's Object
. Внутри моих объектов у меня есть переменные, и эти переменные помечены как @objc dynamic
@objc dynamic var title: String = ""
Теперь представьте ситуацию, когда у меня больше похожих объектов с одинаковой переменной title
. Я хочу создать для них протокол, так как хочу иметь только один универсальный метод для изменения заголовка объекта.
Итак, я создал протокол с переменной title
, помеченной как @objc dynamic
, ожидая, что так оно и будет
protocol Titleable: class {
@objc dynamic var title: String { get set }
}
... это не сработало, и я получил две ошибки.
Один о маркировке переменной как @objc
@ objc может использоваться только с членами классов, протоколами @objc и конкретными расширениями классов
... это я мог бы решить, пометив протокол как @objc
.
Однако у меня все еще была ошибка, связанная с ключевым словом dynamic
Только члены классов могут быть динамическими
... Я думал, что когда я ограничиваю протокол для классов, все должно быть в порядке, но ... это не так.
Я как-то решил это, удалив @objc
, а также dynamic
ключевые слова
protocol Titleable: class {
var title: String { get set }
}
... это работает. Я могу пометить переменную как @objc dynamic
в классе, где я реализую этот протокол.
class Item: Object, Titleable {
@objc dynamic var title: String = ""
}
Однако я не уверен, почему это работает и почему маркировка переменной как dynamic
в объявлении протокола не работает. Буду признателен за любое объяснение.