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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:27:33