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

如何在Swift中读取Objective-C数组?调用后始终返回nil

问题解决:Swift访问Objective-C类的NSArray属性始终为nil

你的代码存在两个核心问题:

  1. .m文件中的全局变量与实例属性无关:你在@implementation外声明的NSArray* myArray;是全局变量,不属于ClassName的实例成员,和你在.h中声明的实例属性myArray没有任何关联。
  2. 实例属性未初始化:你没有对@property对应的实例变量进行初始化操作,Objective-C中对象类型的实例变量默认值为nil,所以Swift访问时自然得到nil。

修正步骤:

  1. 删除全局变量:移除.m文件中的NSArray* myArray;这一行代码。
  2. 初始化实例属性:在类的初始化方法init中为属性对应的实例变量赋值。由于Objective-C现在默认会自动为@property合成带下划线前缀的实例变量(比如_myArray),直接在init中初始化即可。

修正后的.m文件代码:

@implementation ClassName

- (instancetype)init {
    self = [super init];
    if (self) {
        // 初始化数组,示例为包含元素的数组,也可以是@[]空数组
        _myArray = @[@"Item 1", @"Item 2", @"Item 3"];
    }
    return self;
}

@end

补充说明:

如果你需要手动控制实例变量的名称(不推荐,默认自动合成更规范),可以使用synthesize关键字指定,比如:

@implementation ClassName
// 指定实例变量名为myArray,而非默认的_myArray
@synthesize myArray = myArray;

- (instancetype)init {
    self = [super init];
    if (self) {
        myArray = @[];
    }
    return self;
}
@end

完成上述修改后,Swift中的代码var x = ClassName().myArray就能正确获取到初始化后的数组,不再是nil。

内容的提问来源于stack exchange,提问作者Vijay Ananth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:40:41