Использование атрибута @objc для класса Swift, который не наследуется от класса Objective-C
Следующий абзац из раздела о совместимости документации Использование Swift с какао и Objective-C (Swift 2.1), по- видимому, предполагает, что существует способ использовать класс Swift, который не наследуется от класса Objective-C для взаимодействия.
Когда вы создаете класс Swift, который происходит от класса Objective-C, этот класс и его члены - свойства, методы, индексы и инициализаторы, совместимые с Objective-C - автоматически доступны из Objective-C. В некоторых случаях вам необходим более точный контроль над тем, как ваш Swift API подвергается воздействию Objective-C. Вы можете использовать атрибут @objc, если ваш класс Swift не наследуется от класса Objective-C или если вы хотите изменить имя символа в вашем интерфейсе, поскольку он подвергается воздействию кода Objective-C.
И я попытался сделать следующее:
import Foundation
@objc class FooBar {
@objc var name: String;
init() {
name = "Hello World!"
}
}
Но, к сожалению, это приводит к ошибке компиляции: @objc могут быть объявлены только классы, наследуемые от NSObject.
Я что-то неправильно понимаю?
1 ответ
Взгляните на эту ветку на форумах разработчиков Apple.
В основном то, что вы говорите, было возможно в Xcode <=6, но удалено в Xcode 7
В значительной степени да.
@objc
на укоренившихся классах никогда не вел себя какNSObject
-корневой класс, приводящий к различным странностям в сгенерированном заголовке и во время выполнения. Вы по-прежнему можете рассматривать любой экземпляр класса Swift какAnyObject
пометьте методы и свойства класса Swift как@objc
и соответствуют протоколам Objective-C; класс просто не отображается в сгенерированном заголовке и по умолчанию не имеет своих членов, доступных в Objective-C.