如何从现有Swift文件为ObjC++创建桥接头文件
手动创建桥接头文件并在ObjC++中调用Swift模块的流程
完全支持手动创建桥接头文件,具体流程如下:
1. 创建桥接头文件
- 在Xcode的项目目录右键,选择「New File」
- 在模板窗口中选「iOS/macOS → Header File」,命名格式建议为
[项目名]-Bridging-Header.h(比如项目叫MyApp,就命名MyApp-Bridging-Header.h,Xcode会默认识别这个命名格式)
2. 配置项目Build Settings
- 打开项目的Build Settings,搜索「Objective-C Bridging Header」
- 在对应字段填入桥接头文件的相对路径,比如文件在项目根目录就填
$(SRCROOT)/MyApp-Bridging-Header.h,在子目录则填$(SRCROOT)/SubFolder/MyApp-Bridging-Header.h - 确认「Install Objective-C Compatibility Header」设置为
YES(默认即为YES)
3. 标记Swift代码以支持ObjC调用
- 需要被ObjC++调用的Swift类必须继承自
NSObject,且类/函数前要加@objc关键字,示例:
import Foundation @objc class SwiftModule: NSObject { @objc func doSomething() -> String { return "来自Swift的返回结果" } @objc static func staticMethod() { print("Swift静态方法被调用") } }
4. 在ObjC++文件中调用Swift代码
- 在
.mm后缀的ObjC++文件顶部,导入Xcode自动生成的兼容性头文件#import "[项目名]-Swift.h"(该文件无需手动创建,命名规则为项目名加-Swift.h),示例:
#import "MyApp-Swift.h" void callSwiftCode() { SwiftModule *swiftObj = [[SwiftModule alloc] init]; NSString *result = [swiftObj doSomething]; NSLog(@"%@", result); [SwiftModule staticMethod]; }
注意事项
- 桥接头文件主要用于Swift调用ObjC代码,而ObjC++调用Swift仅需导入自动生成的
[项目名]-Swift.h,但正确配置桥接头是生成该兼容性头的前提 - 若Swift代码使用自定义类型,需确保这些类型也用
@objc标记,或符合ObjC兼容要求 - 项目名含空格时,兼容性头文件会将空格替换为下划线,比如项目名「My Test App」对应
My_Test_App-Swift.h
内容的提问来源于stack exchange,提问作者Space Bear
相关产品推荐
相关产品推荐

