如何在现有Objective-C项目中添加.swift文件并实现跨文件访问
嘿,我来一步步给你讲清楚怎么把Swift文件加到已有的Objective-C项目里,还有两者之间怎么互相调用——这事儿我帮不少开发者搞定过,其实没那么复杂~
把Swift文件添加到现有Objective-C项目
1. 添加Swift文件到项目
- 直接在Xcode里右键项目目录 →
New File...选择Swift File,或者把现成的.swift文件拖进项目 - 这时候Xcode会弹出提示框,问你要不要创建Objective-C Bridging Header(OC桥接文件),直接选
Create就行!这个文件是连接OC和Swift的核心桥梁 - 如果没弹出提示也别慌,手动创建也很简单:新建一个Header文件,命名成
你的项目名-Bridging-Header.h,然后去项目的Build Settings里搜索Objective-C Bridging Header,把这个文件的路径填进去(比如$(SRCROOT)/项目名/项目名-Bridging-Header.h)
2. Objective-C调用Swift代码
要让OC能访问Swift的类和方法,得做这几步配置:
- Swift里的类必须继承NSObject,因为OC只能识别继承自NSObject的类
- 要暴露给OC的属性、方法,要么给单个成员加
@objc修饰,要么给整个类加@objcMembers(这样类里所有属性方法都会自动暴露给OC,省得一个个加)
举个实际例子:@objcMembers class SwiftTools: NSObject { var welcomeMsg: String = "Hello from Swift" func calculateSum(a: Int, b: Int) -> Int { return a + b } } - 在OC的
.m文件里导入Xcode自动生成的Swift头文件,这个文件命名规则是你的项目名-Swift.h——注意它是隐藏的自动生成文件,你看不到但可以直接导入:#import "YourProjectName-Swift.h" - 现在就可以在OC里自由调用Swift代码了:
SwiftTools *swiftTool = [[SwiftTools alloc] init]; NSLog(@"%@", swiftTool.welcomeMsg); NSLog(@"Sum is: %ld", [swiftTool calculateSumWithA:3 B:5]);
3. Swift调用Objective-C代码
反过来,Swift访问OC的操作更简单:
- 打开之前创建的桥接文件(
项目名-Bridging-Header.h),把你想让Swift访问的OC头文件导进去,比如:#import "OCTools.h" - 不需要额外导入,直接在Swift里使用OC的类就行:
let ocTool = OCTools() print(ocTool.testString) print(ocTool.getRandomNumber())
一些避坑小细节
- 自动生成的
项目名-Swift.h是只读文件,别去手动修改它,Xcode会根据你的Swift代码自动更新 - Swift里的可选类型(Optional)在OC里会对应
nullable,比如String?对应OC的NSString *_Nullable - Swift的方法名会自动转换成OC风格,比如Swift的
func doSomething(with param: Int)在OC里会变成- (void)doSomethingWithParam:(NSInteger)param; - 确保项目
Build Settings里的Defines Module设置为YES(默认是开启的),不然OC可能找不到Swift的头文件
内容的提问来源于stack exchange,提问作者NSurajit
相关产品推荐
相关产品推荐

