You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift与C++直接互操作中传递Swift对象至C++方法

Swift与C++框架内互操作问题解决方案

问题1:C++头文件找不到<Fibonacci/Fibonacci-Swift.h>

这个自动生成的头文件是Swift编译产物,按以下步骤排查修复:

  • 确认框架Build Settings配置:
    1. 找到Swift Compiler - General选项,将Install Objective-C Compatibility Header设为Yes。
    2. 确保Objective-C Generated Interface Header Name的值为Fibonacci-Swift.h(默认就是框架名+后缀,无需修改,除非自定义过)。
  • 检查C目标的头文件搜索路径:
    在C
    目标的Build Settings > Search Paths > Header Search Paths中添加$(BUILT_PRODUCTS_DIR)/Fibonacci.framework/Headers,并设置为non-recursive。
  • 先编译Swift代码:这个头文件只有在Swift目标编译完成后才会生成,先Build Swift框架目标,再编译C++部分。

问题2:前置声明Swift类后RegisterCallback方法不被Swift识别

Swift 5.9+的直接互操作中,需要正确暴露Swift类并在C++中对应声明:

  1. 在Swift类上添加@_expose(Cxx)属性,将其暴露给C++:
@_expose(Cxx)
class SwiftSideInterfaceBridge {
    // 类实现代码
}
  1. 在C++头文件中,用Swift命名空间前置声明该类:
namespace Swift {
    class SwiftSideInterfaceBridge;
}

class CxxToSwiftInterfaceBridge {
public:
    void RegisterCallback(Swift::SwiftSideInterfaceBridge* swiftObj);
};
  1. 在C++实现文件(.cpp)中引入Swift生成的头文件:
#include <Fibonacci/Fibonacci-Swift.h>

void CxxToSwiftInterfaceBridge::RegisterCallback(Swift::SwiftSideInterfaceBridge* swiftObj) {
    // 方法实现
}

这样Swift就能正确识别RegisterCallback方法的参数类型,因为C++中使用了Swift命名空间下的类声明,和Swift暴露的类完全对应。

内容的提问来源于stack exchange,提问作者Crazy Sage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:43:15