Как создать смешанный модуль разработки - PullRequest
0 голосов
/ 23 января 2019

Извините, потому что я не могу включить код, потому что эта ситуация столкнулась со мной в работе и по некоторым причинам безопасности я не могу поделиться кодом.

Что у меня есть:

У меня есть модуль Objective-c, содержащий компоненты пользовательского интерфейса и основные базовые классы

Я хочу:

Я хочу использовать компонент Swift (RatePlanCardView) в основном проекте. Мне нужно, когда для создания контроллера представления, содержащего представление с пользовательским классом (RatePlanCardView) и создания выхода для него, я могу вызвать любую функцию в этом пользовательском классе.

Что я сделал:

Я создал контроллер представления в раскадровке, содержащей представление, затем изменил класс этого представления на (RatePlanCardView) и создал для него выход.

Что случилось:

Когда я следил за отладкой, я обнаружил, что классом этого выхода является UIView, а не (RatePlanCardView), поэтому каждый вызов любой функции в ошибке пользовательского класса происходил, как показано ниже.

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [UIView AdjustCardView]: нераспознанный селектор отправлен в экземпляр 0x7ffbae08ab10'

Пока (AdjustCardView) является функцией в классе (RatePlanCardView).

У меня было 2 решения:

1 - Я создал модуль Swift для нового компонента (RatePlanCardView), и этот класс наследует класс от модуля ObjC (ExpandableCardView), и он успешно компилируется. Когда я помещаю новый модуль в основной проект и использую его по мере необходимости, все успешно компилируется, но когда я перехожу к своему новому контроллеру представления и вызываю функцию (AdjustCardView), появляется ошибка выше. но когда я вижу определение этой функции, xCode перемещает меня к правильной функции, но он не может выполнить какую-либо функцию, потому что он уже видит пользовательский класс как UIView, а не RatePlanCardView.

2- Я пытался найти, как создать смешанный разработанный модуль, но не смог найти поддержки учебника для этого решения.

Примечание:

Спасибо за ваше терпение и поддержку и за то, что вы дали мне время прочитать мои вопросы. Конечно, любое другое решение будет более чем приветствоваться. Также, если вы помогли мне с любым из вышеуказанных решений, также спасибо.

Заранее спасибо.

Я решил эту проблему:

Я создал фреймворк, содержащий код objC и код swift с файлом заголовка моста, и все работало просто отлично

1 Ответ

0 голосов
/ 23 января 2019

Розетка, которую вы создали, должна выглядеть примерно так:

@property (nonatomic, weak) IBOutlet RatePlanCardView *rpCardViewOutlet;

Теперь перейдите на XIB и подключите эту розетку к вашему RatePlanCardView виду. Таким образом, вы можете соединить представление с выходом только в том случае, если тип соответствует и любой вызов функции этого класса должен сработать.

...