Swift 2.1: свойство не может быть помечено как динамическое?

Как исправить эту ошибку компиляции?

dynamic var users = [User]()

Свойство не может быть помечено как динамическое, поскольку его тип не может быть представлен в Objective-C.

Мне нужно dynamic, чтобы определенные контроллеры представлений могли наблюдать (через KVO) users и обновлять свои представления при изменении users.


person ma11hew28    schedule 25.10.2015    source источник
comment
Довольно ясное сообщение об ошибке. Какое слово ты не понимаешь?   -  person matt    schedule 25.10.2015
comment
Я понимаю, это. Я не знаю, как это исправить. Смотрите обновления.   -  person ma11hew28    schedule 25.10.2015
comment
Является ли пользовательский подкласс NSObject?   -  person vikingosegundo    schedule 25.10.2015
comment
@vikingosegundo нет, не было. Я думаю, что создание подкласса NSObject сработало! Спасибо! :-) Если я правильно помню, в более ранней версии Swift он работал, не будучи подклассом NSObject, т.е. только наблюдатель должен был быть подклассом NSObject. Мне так больше нравится, потому что я не понимаю, почему User должен быть подклассом NSObject.   -  person ma11hew28    schedule 25.10.2015
comment
Я думаю, что наблюдаемый объект всегда должен быть подкласса NSObject. о чем также говорится в этой статье от февраля. blog.scottlogic.com/2015/02/11/swift- kvo-alternatives.html   -  person vikingosegundo    schedule 25.10.2015


Ответы (1)


Так же, как упоминается в ошибке

ошибка, а не @objc : NSObject:

class A{

}

func something(){
    dynamic var a = [A]()
}

следует изменить на:

@objc class A:NSObject{

}

func something(){
    dynamic var a = [A]() //works, all good
}
person Daniel Krom    schedule 25.10.2015
comment
Использование @objc при наследовании от NSObject устарело. Это неявно для любого наследования от NSObject - person Claus Jørgensen; 26.10.2015