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

如何在Xcode工作区中让项目A的FirstFunc调用项目B的SecondFunc?

Objective-C项目调用Swift项目函数的实现步骤

针对你在Xcode工作区中,用项目A(Objective-C)的FirstFunc调用项目B(Swift)的SecondFunc的需求,按以下步骤操作:

1. 配置项目依赖关联

选中项目A的target,进入Build Phases → Target Dependencies,点击+按钮添加项目B的target,确保项目A编译时会先构建项目B的代码。

2. 开启Swift模块并导入桥接文件

  • 选中项目B的target,进入Build Settings,找到Defines Module选项,设置为YES;同时确认Product Module Name为项目B的模块名(比如ProjectB,保持默认即可)。
  • 在项目A中FirstFunc所在的Objective-C文件顶部,导入自动生成的Swift桥接头文件:
    #import <ProjectB/ProjectB-Swift.h>
    
    注:这个文件是Xcode自动生成的,命名规则为[模块名]-Swift.h,无需手动创建,只要项目B编译过一次就会生成。

3. 让Swift函数可被Objective-C访问

如果SecondFunc是类方法或实例方法,需要确保所在类继承自NSObject并添加@objc修饰(或用@objcMembers修饰整个类):

@objcMembers class SwiftTool: NSObject {
    func secondFunc() {
        // 你的函数逻辑
    }
    
    @objc static func staticSecondFunc() {
        // 静态函数示例
    }
}

如果是全局Swift函数,直接添加@objc修饰:

@objc func secondFunc() {
    // 全局函数逻辑
}

4. 在Objective-C中调用Swift函数

在项目A的FirstFunc里,直接实例化Swift类调用方法,或直接调用全局函数:

- (void)firstFunc {
    // 调用实例方法
    SwiftTool *tool = [[SwiftTool alloc] init];
    [tool secondFunc];
    
    // 调用静态方法
    [SwiftTool staticSecondFunc];
    
    // 调用全局函数
    secondFunc();
}

注意事项

  • 确保两个项目的Deployment Target版本一致,避免版本不兼容导致的编译错误。
  • 如果找不到桥接头文件,先清理项目(Cmd+Shift+K)再重新编译(Cmd+B)项目B,触发桥接文件生成。
  • 检查Swift函数的访问权限,确保是internal或public(默认是internal,足够跨项目访问)。

内容的提问来源于stack exchange,提问作者Andy Terekhin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:14:52