如何在Objective-C类中访问Swift AppDelegate的public变量?
解决Swift变量在Objective-C中无法访问的问题
我来帮你搞定这个Swift变量在Objective-C里访问的问题!你已经做了部分正确的操作,但可能漏掉了几个关键步骤,咱们一步步来排查:
1. 确保LoggedInUserModel类兼容Objective-C
首先,你的LoggedInUserModel必须是Objective-C能识别的类,这需要满足两个核心条件:
- 必须继承自
NSObject(Objective-C只能识别基于NSObject的Swift类) - 类前添加
@objc修饰(或者用@objcMembers让类的所有属性/方法默认暴露给OC)
示例代码:
@objcMembers class LoggedInUserModel: NSObject { // 你的属性定义 init(userDict: [String: Any]) { // 初始化逻辑 super.init() } // 如果需要在OC里直接调用初始化器,给它加@objc修饰 @objc convenience init() { self.init(userDict: [:]) } }
2. 正确标记AppDelegate里的变量
确保你的变量同时添加@objc和合适的访问控制修饰符(比如public或internal,只要OC能访问到就行),注意@objc要放在变量声明的最前面:
@objc public var loggedInUserModelObject = LoggedInUserModel(userDict: [:])
3. 在Objective-C文件中导入自动生成的Swift头文件
很多人会混淆桥接文件的作用:桥接文件是给Swift访问Objective-C用的,而Objective-C要访问Swift,需要导入Xcode自动生成的头文件,格式是#import "你的项目名-Swift.h"。
比如你的项目叫MyApp,就在OC文件顶部添加:
#import "MyApp-Swift.h"
这个文件是Xcode自动维护的,不需要你手动创建,只要项目里有Swift代码就会生成。
4. 检查Build Settings配置
如果上面的步骤都做了还是不行,检查一下项目的Build Settings:
- 找到
Packaging分类下的Defines Module,确保设置为YES - 确认
Product Module Name是你的项目名称(和上面导入的头文件名称完全一致)
5. 清理缓存重新编译
有时候Xcode的缓存会导致奇怪的问题,试试:
- 按下
Cmd + Shift + K清理Build Folder - 重启Xcode,然后重新编译项目
做完这些步骤后,你应该就能在Objective-C里通过以下代码访问变量了:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; // 访问变量 appDelegate.loggedInUserModelObject;
内容的提问来源于stack exchange,提问作者Gurpreet
相关产品推荐
相关产品推荐

