Как добавить прямые ссылки на классы, используемые в заголовке -Swift.h?

Я интегрирую код Swift в большой проект Objective-C, но у меня возникают проблемы, когда мой код Swift ссылается на классы Objective-C. Например, предположим, у меня есть:

  1. Класс Objective-C называется MyTableViewController
  2. Класс Objective-C называется DeletionWorkflow

Я объявил класс Swift следующим образом:

class DeletionVC: MyTableViewController {
  let deleteWorkflow: DeletionWorkflow

  ...
}

Если я сейчас попробую использовать этот класс, импортируя ProjectName-Swift.h в коде Objective-C, я получаю неопределенные ошибки символов для обоих MyTableViewController а также DeletionWorkflow,

Я могу исправить проблему в этом отдельном исходном файле, импортировав DeletionWorkflow.h а также MyTableViewController.h прежде чем я импортирую ProjectName-Swift.h но это не масштабируется до большого проекта, где я хочу, чтобы мои Swift и Objective-C часто взаимодействовали.

Есть ли способ добавить прямые ссылки на классы ProjectName-Swift.h чтобы эти ошибки не возникали, когда я пытаюсь использовать классы Swift из кода Objective-C в своем приложении?

2 ответа

Решение

Это немного глупо, но звучит так, будто ваш "обходной путь" - это то, что задумал Apple, по крайней мере, на данный момент. Из руководства по взаимодействию:

Если вы используете свои собственные типы Objective C в своем коде Swift, обязательно импортируйте заголовки Objective C для этих типов перед импортом сгенерированного заголовка Swift в Objective C .m файл, к которому вы хотите получить доступ к коду Swift.

В этой ветке devforums кто-то упомянул, что они уже подали ошибку в Radar. Вы, вероятно, тоже должны.

Вы можете создать другой заголовочный файл, который пересылает, объявляет или импортирует необходимые классы, а затем импортирует ProjectName-Swift.h, Например, создайте файл с именем ProjectName-Swift-Fixed.h с содержанием:

// ProjectName-Swift-Fixed.h

// Forward declarations for property classes
@class DeletionWorkflow;

// Imports for superclasses
#import "MyTableViewController.h";

#import "ProjectName-Swift.h"

Тогда вместо #import "ProjectName-Swift.h" в вашей кодовой базе используйте #import "ProjectName-Swift-Fixed.h,

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