Вы, похоже, неправильно поняли, для чего используется атрибут @nonobjc
:
Из документов :
nonobj c
Примените этот атрибут к объявлению метода, свойства, нижнего индекса или инициализатора для подавления неявного атрибута objc
.
Если вы прокрутите дальше вниз по странице, он говорит вам, что будет иметь неявный атрибут objc
на них:
Компилятор неявно добавляет атрибут objc
к подклассам любого класса, определенного в Objective- C. Однако подкласс не должен быть обобщенным c и не должен наследоваться от каких-либо обобщенных c классов. [...] Атрибут obj c также неявно добавляется в следующих случаях:
- Объявление является переопределением в подклассе, и объявление суперкласса имеет атрибут obj c.
- Объявление удовлетворяет требованию протокола с атрибутом
objc
. - Объявление имеет
IBAction
, IBSegueAction
, IBOutlet
, IBDesignable
, * 1036 Атрибут *, NSManaged
или GKInspectable
.
Сюда не входят протоколы, поэтому протоколы никогда не подвергаются явному воздействию Objective- C. Это означает, что вам не нужен атрибут nonobjc
в протоколах для подавления неявных objc
s в протоколах. Протоколы по умолчанию не доступны Objective- C, если вы не пометите их как @objc
.