«Не удается найти объявление интерфейса» в автоматически сгенерированном заголовке моста Swift

Мой текущий проект содержит код Swift и Objective-C. Оба типа исходных файлов используют код другого языка. Когда я делаю полную очистку и перекомпилирую, я получаю ошибки почти в каждом объявлении класса Swift в Module-Swift.h в форме:

Cannot find interface declaration for 'UIViewController', superclass of 'CustomViewController'

Мои симптомы похожи на этот вопрос, в аналогичных обстоятельствах этот вопрос. Другими словами:

  • Module-Bridging_Header.h импортирует мой заголовок Objective-C, Class.h
  • Файл реализации Class.m импортирует заголовок Swift, Module-Swift.h

Если я буду следовать подходу в ответах на этот вопрос, я могу устранить ошибку, добавив следующий файл и импортировав его вместо Module-Swift.h:

//
//  Module-Swift-Fixed.h
//  Module
//

#ifndef Module_Swift_Fixed_h
#define Module_Swift_Fixed_h

#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>
#import <UIKit/UIKit.h>

#import "Module-Swift.h"

#endif /* Module_Swift_Fixed_h */

Это похоже на ужасный взлом. Я пропустил какой-то правильный способ добиться этого в Xcode?


person sapi    schedule 07.09.2015    source источник
comment
Вы используете Swift 2.0? Кажется, это не проблема с Xcode 7. Если да, можете ли вы опубликовать проект?   -  person SwiftArchitect    schedule 08.09.2015
comment
У меня была аналогичная проблема. Мой (чуть лучше?) хак заключался в том, чтобы добавить отсутствующий импорт в заголовок моста.   -  person Bjorn Roche    schedule 27.11.2015
comment
См. stackoverflow.com/questions/52400250.   -  person ReinstateMonica3167040    schedule 09.06.2020


Ответы (1)


В файлах Obj-C вам необходимо импортировать модуль swift (с #import "Module-Swift.h").

Делайте это только в тех файлах, где вы собираетесь использовать типы, определенные в вашем модуле Swift.

person Eneko Alonso    schedule 14.09.2017