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