Как добавить прямые ссылки на классы, используемые в заголовке -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, я получаю неопределенные ошибки символов для обоих 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
,