如何将Swift编写的AppDelegate暴露给Objective-C第三方库?
解决Swift AppDelegate暴露给Objective-C第三方库的问题
我来帮你搞定这个混编场景的问题!这是Swift和Objective-C交互时很常见的需求,我给你梳理下完整的解决步骤:
第一步:确认项目混编配置是否正确
先检查项目的Build Settings,确保这两个选项设置到位:
- 找到
Defines Module,设置为YES - 确认
Product Module Name是你项目的正确名称(比如你提到的People)
第二步:正确标记Swift的AppDelegate
只加@objc注解可能不够全面,推荐用@objcMembers来一次性暴露整个类的所有成员给Objective-C:
import UIKit @objcMembers class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? // 你的其他AppDelegate生命周期方法、自定义属性/方法... }
如果只是需要暴露特定方法/属性,也可以单独给它们加@objc,但@objcMembers在整个类都需要暴露的情况下更省心。
第三步:在Objective-C文件中正确导入自动生成的头文件
Xcode会自动生成一个包含所有暴露给OC的Swift代码的头文件,你需要在第三方库的.m文件里(注意是.m,不能是.h)导入它,格式是:
#import <项目模块名/项目模块名-Swift.h>
对应你的项目就是:
#import <People/People-Swift.h>
这个头文件不需要手动创建,Xcode会根据你的Swift代码自动维护。
最后验证&排障
现在你就可以在OC代码里正常使用AppDelegate了,比如获取实例:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
如果还是无法识别,试试执行Cmd+Shift+K清理项目缓存,再重新Build一次——有时候Xcode的缓存会导致头文件生成不及时。
内容的提问来源于stack exchange,提问作者Paul Brittain
相关产品推荐
相关产品推荐

