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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:19:11