Подтвердить что ты не робот

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

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

  • Класс Objective-C, называемый MyTableViewController
  • Класс Objective-C под названием DeletionWorkflow

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

class DeletionVC: MyTableViewController {
  let deleteWorkflow: DeletionWorkflow

  ...
}

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

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

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

4b9b3361

Ответ 1

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

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

В этот devforums thread, кто-то сказал, что они уже подали ошибку в Radar. Возможно, вам тоже стоит.

Ответ 2

Вы можете создать другой файл заголовка, который пересылает объявления или импортирует необходимые классы, а затем импортирует 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.