Круговая ссылка, Obj-C -> Swift, Swift -> Obj-C - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь создать класс Objc со свойством типа enum, в котором тип enum создается в swift. После этого я хочу использовать класс Objc в Swift.

(Swift) Enum:

import Foundation

@objc enum AffectsUnit:Int {
    case time
    case person
    case group
}

(ObjC) класс

#import "JSONModel.h"
#import "MyApp-Swift.h"
@interface AddPlayerToTime : JSONModel
@property (nonatomic) AffectsUnit affectsUnit;
@end

В классе Objc есть пустой файл метода.

Пока все хорошо. Нет предупреждений компилятора.

Поскольку я также хочу использовать свой класс objc в Swift. Мне нужно импортировать класс в мой Bridging-Header.h.

#import "AddPlayerToTime.h"

Теперь мой быстрый код может видеть класс AddPlayerToTime, но проект больше не будет компилироваться. Я получаю ошибку:

Unknown type name 'AffectsUnit'

Я на 99% уверен, что он сломался из-за циклической ссылки. Поскольку мой swift-код импортирует класс AddPlayerToTime, а AddPlayerToTime импортирует мой swift-код. Но я не знаю, как это исправить. Кажется, что все посты в этом циркулярном справочном материале предлагают использовать объявление @class. Но поскольку я пытаюсь сослаться на перечисление, а не на класс, для меня это не решение.

Пытаюсь ли я сделать что-то, чего нельзя сделать просто?

Edit1: Обратите внимание: я хочу, чтобы как можно больше кода оставалось на стороне Swift.

1 Ответ

0 голосов
/ 04 июля 2018

Вы должны быть в состоянии переместить перечисление в сторону Obj-C и по-прежнему видеть его в Swift, например:

typedef NS_ENUM(NSInteger, AffectsUnit)
{
    AffectsUnitTime,
    AffectsUnitPerson,
    AffectsUnitGroup
};
...