我有一个混合了Objective-C()、C和Swift的Xcode项目,其中一些Objective-C充当了Swift和C之间的桥梁。
假设我有一个Objective-C类,它有一个公共属性,类型是一个C++类,我想从Objective-C代码的其他部分使用它。如果头文件导入到Swift桥接头文件中,这将导致编译器错误。有没有办法隐藏这个Objective-C类的头文件的一部分?
编辑:这里有一个示例头文件来说明我的意思。
#import <Foundation/Foundation.h>
class MyCppType;
@interface SwiftCancelationToken : NSObject
//I need to expose this so Obj-C can interact with it
@property MyCppType *cppProperty;
-(void)doSomethingWithCppObject;
@end
1条答案
按热度按时间ivqmmu1c1#
长话短说--这是类API设计上的一个错误。如果你想要一个与Objective-C/Swift兼容的头文件,它不能暴露任何C的东西,比如C类、模板、关键字等等......只有Swift - Objective-C(有时是C)的互操作性,而没有Swift - Objective-C的互操作性(然而Swift - C的互操作项目正在进行中)。
另一方面,当编译器前端处于另一种语言模式时,您可以使用
__cpluplus
保护从技术上放置预处理器,它可能会忽略头文件中的任何C++部分: