如何在swift中读取objective-c数组?它总是返回零

How to read an objective-c array in swift? Its always returning nil

提问人:vedhanish 提问时间:11/9/2022 最后编辑:Joakim Danielsonvedhanish 更新时间:11/9/2022 访问量:74

问:

我在 .h 文件中声明了一个 NSArray

@interface ClassName : NSObject
{
NSArray *myArray;
}
@property (nonatomic, strong) NSArray *myArray;
@end

在.m文件中,这是我拥有它的方式。

@implementation ClassName
NSArray* myArray;

我正在尝试以 swift 访问它,如下所示。

var x = ClassName().myArray

x 始终为零。

Swift Objective-C NSRaigh

评论

2赞 Larme 11/9/2022
它的初始化是什么?它是否初始化了ClassNamemyArray
0赞 vedhanish 11/9/2022
@Larme,不,我还没有初始化它。
2赞 Alexander 11/9/2022
好吧,这是你的问题:)您的 Objective C 类需要一个方法,以使用新的数组实例集初始化其对象–init
2赞 Larme 11/9/2022
在 Objective-C 中,目前刚刚声明。但是我们没有在任何地方看到一个(如果你想给它添加值,我会期待一个)。myArraymyArray = [[NSArray alloc] init];NSMutableArray

答:

0赞 HangarRash 11/9/2022 #1

您的 Objective-C 类存在几个问题。您已经声明了该属性(这很好),但您还在头文件中添加了一个同名的公共实例变量,并在 .m 文件中创建了一个同名的全局变量(不是实例变量)。以下是您应该具备的:myArray

在 .h 文件中:

@interface ClassName : NSObject
@property (nonatomic, strong) NSArray *myArray;
@end

在 .m 文件中:

@implementation ClassName

@end

就是这样。

下一个大问题是,您正在访问该属性,但您从未给它一个值。这就是为什么你总是得到.myArraynil

这与你有一个 Swift 类没有什么不同,该类具有一个你从未给过值的可选属性。

假设您有以下 Swift 类:

class ClassName {
    var myArray: [Any]?
}

如果您随后这样做了:

var x = ClassName().myArray

你会得到就像你使用 Objective-C 类一样。在这两种情况下,您都需要创建该类的实例并将初始值赋给 。nilmyArray

var c = ClassName()
c.myArray = [ "Hi", "There" ]

现在您可以访问该数组:

var x = c.myArray

顺便说一句 - 假设您希望数组保存特定类型的值,您应该更新 Objective-C 类中的属性声明。

例如:

@property (nonatomic, strong) NSArray<NSString *> *myArray;

如果您想要一个 .NSString