我怎样才能对Swift隐藏Objective-C类的部分接口呢?

vkc1a9a2  于 2023-03-16  发布在  Swift
关注(0)|答案(1)|浏览(97)

我有一个混合了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
ivqmmu1c

ivqmmu1c1#

长话短说--这是类API设计上的一个错误。如果你想要一个与Objective-C/Swift兼容的头文件,它不能暴露任何C的东西,比如C类、模板、关键字等等......只有Swift - Objective-C(有时是C)的互操作性,而没有Swift - Objective-C的互操作性(然而Swift - C的互操作项目正在进行中)。
另一方面,当编译器前端处于另一种语言模式时,您可以使用__cpluplus保护从技术上放置预处理器,它可能会忽略头文件中的任何C++部分:

#import <Foundation/Foundation.h>

#ifdef __cplusplus
class MyCppType;
#endif

@interface SwiftCancelationToken : NSObject

#ifdef __cplusplus
@property MyCppType *cppProperty;
#endif

-(void)doSomethingWithCppObject;

@end

相关问题