Существует ли атрибут Swift, например @ nonobj c, для протоколов? - PullRequest
1 голос
/ 17 марта 2020

Я хочу написать PAT, и меня не волнует совместимость Obj- C. Атрибут @ nonobj c звучит идеально, но он предназначен только для переменных и методов. Что-нибудь похожее для сокрытия протоколов от Obj- C?

1 Ответ

2 голосов
/ 17 марта 2020

Вы, похоже, неправильно поняли, для чего используется атрибут @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.

...