Использование атрибута @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.

Другие вопросы по тегам