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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:18:14