Swift 5.9与Xcode 15中从C++调用Swift类的实例创建问题
Swift 5.9 C++互操作:创建Swift类实例并调用方法的解决方案
要解决在C中创建Swift类实例并调用方法的问题,需要调整Swift类的暴露方式、权限设置,以及C端的实例化逻辑,具体步骤如下:
1. 修改Swift代码
需要将Swift类暴露给C++,并确保构造器和方法的访问权限为public:
import Foundation setup() public func callback(){ } // 使用@_expose(Cxx)标记类,使其可被C++访问 @_expose(Cxx) public class SwiftClass { // 公开构造器,确保C++能调用 public init() {} // 公开方法,让C++端可见 public func doSomething() { print("执行Swift类的doSomething方法") } }
2. 修改C++代码
Swift引用类型在C++中无法直接栈分配,必须通过智能指针管理实例内存,使用类的静态make()方法创建实例:
#include "Test-Swift.h" #include <memory> using namespace Test; void setup(void){ callback(); // 通过std::unique_ptr管理Swift对象内存,调用静态make()方法创建实例 std::unique_ptr<SwiftClass> obj = SwiftClass::make(); // 调用Swift类的方法 obj->doSomething(); }
3. 验证项目配置
确保Xcode项目的以下配置正确:
- 目标的Build Settings中,
Enable C++ Interoperability设置为Yes - 桥接头文件已正确配置,确保Swift代码能调用C++的
setup()函数
完成以上修改后,即可在C++的setup()函数中成功创建Swift对象并调用其方法。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

