我曾遇到一个类似的问题,涉及Swift、Objective-C和CoreData的混合交互:在我的项目(用Swift编写)中,我利用了Core Data自动生成的Swift类。
但有一次,我需要一个Objective C类,其中包含公共属性(在其头部对应文件中定义),这些属性引用了核心数据实体。
#import "ProjectName-Swift.h"
@interface myObjCClass : NSObject
@property (nonatomic) MyCoreDataClass*myEntity;
@end
当我改变了CoreData模型后,XCode试图重建类,结果我被指示的循环构建错误所困扰。
一开始我感到绝望,因为我的项目中没有编译头阶段可以更改顺序,但我发现解决方案非常简单:
在myObjCClass.h
中,我删除了共享的Swift头文件导入语句,并用@class
指令替换它:
@class MyCoreDataClass; // tell the compiler I will import the class definition somewhere else
@interface myObjCClass : NSObject
@property (nonatomic) MyCoreDataClass*myEntity;
@end
我将#import "ProjectName-Swift.h"
语句移动到myObjCClass.m
类定义文件中。
#import "myObjCClass.h"
#import "ProjectName-Swift.h"
@implementation myObjCClass
@end
它没有任何担忧。