我有一个混合了Objective-C(++)、C++和SWIFT的Xcode项目.一些Objective-C++充当了SWIFT和C++之间的桥梁.

假设我有一个带有公共属性的Objective-C类,它的类型是我想从Object-C代码的其他部分使用的C++类.如果在SWIFT桥接标头中导入标头,则会导致编译器错误.有没有办法向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

推荐答案

长话短说--这是类API设计中的一个错误.如果你想要一个与Objective-C/Swift兼容的头文件,它不能公开任何C++内容,如C++类、模板、关键字等.只有SWIFT-OBJECT-C互操作性(有时还有C),但没有SWIFT-OBJECT-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

Swift相关问答推荐

在列表项内的NavigationLink中的按钮无法正常工作

如何更新Square Order?

如何消除SwiftUI中SF符号的填充

SwiftUI正在初始化不带状态变量的绑定变量

在SwiftUI中判断选项时避免重复查看

查找数组中 ** 元素 ** 的属性的最小值和最大值

关闭 SwiftUI TabView 中的子视图

允许视图在视图内更改

SwiftUI 无法在实时活动中显示 SpriteView

如何修改下面的代码,使图像 Select 的顺序与使用快速并发的图像呈现的顺序相匹配?

签署GoogleSignIn-GoogleSignIn需要开发团队

Swift 全局函数列表

数组使用偏移量对自身执行 XOR

Swift Components.Url 返回错误的 URL

Alamofire 会自动存储 cookie 吗?

无法分配给属性:self 是不可变的,我知道如何修复但需要理解

如何在 Swift 中将 UILabel 居中?

SwiftUI:将多个 BindableObjects 放入环境

Swift 中的 recursiveDescription 方法?

在情节提要中设置的 UITableViewCell 的恢复 ID 和标识符有什么区别