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
, не буду.