enum, определенный в Objc > Объявленный в Swift > для использования в Objc

У меня есть ситуация. Буду признателен, если у кого-нибудь есть решение для этого

  • У меня есть объект enum сказать Abc
  • Я объявляю это в быстром классе, скажем, MySwiftClass.swift как var abc : Abc!
  • Я создал экземпляр MySwiftClass (mySwiftClass) в другом классе ObjC (файл myObjC.m)
  • В myObjC.m я пытаюсь получить доступ к enum Abc как mySwiftClass.abc,

Это вызывает ошибку - "Свойство abc не найдено для объекта типа MySwiftClass *". По существу, перечисление не добавляется как свойство в файл "ProjectName-Swift.h".

Я считаю, что когда я объявляю перечисление ObjC в классе Swift, оно преобразуется в быстрое перечисление, и, следовательно, я не могу получить к нему доступ в файле ObjC.

Примечание. Пометка класса Swift как @objc не сработала.

1 ответ

Решение

Опции Numeric Swift не могут быть представлены в Objective-C, и, следовательно, не будут представлены Objective-C. декларировать abc не быть необязательным, и он должен быть доступен из Objective-C.

Рассмотрим перечисление Objective C:

typedef NS_ENUM(NSInteger, Foo) {
    FooBar,
    FooBaz,
    FooQux
};

Тогда рассмотрим этот класс Swift 3:

class SomeObject: NSObject {
    var foo1: Foo  = .bar          // this is exposed to Objective-C
    var foo2: Foo! = .bar          // this is not
}

Не необязательный, foo1, будет подвергаться Objective-C, в то время как необязательный, foo2, не буду.

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