如何在 Swift 中读取 Objective-C 数组?它总是返回 nil

问题描述 投票:0回答:1

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

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

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

@implementation ClassName
NSArray* myArray;

我正在尝试在 Swift 中访问它,如下所示。

var x = ClassName().myArray

x
始终是
nil

swift objective-c nsarray
1个回答
0
投票

您的 Objective-C 类存在几个问题。您已经声明了

myArray
属性(这很好),但您还在头文件中添加了一个同名的公共实例变量,并且在头文件中创建了一个同名的全局变量(不是实例变量) .m 文件。以下是您应该拥有的:

在.h文件中:

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

在.m文件中:

@implementation ClassName

@end

就是这样。

下一个大问题是您正在访问

myArray
属性,但您从未给它赋值。这就是为什么你总是得到
nil

这与您有一个带有可选属性但从未为其赋值的 Swift 类没有什么不同。

假设您有以下 Swift 类:

class ClassName {
    var myArray: [Any]?
}

如果你这样做了:

var x = ClassName().myArray

你会得到

nil
,就像使用 Objective-C 类一样。在这两种情况下,您都需要创建该类的实例并为
myArray
分配初始值。

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

现在您可以访问数组了:

var x = c.myArray

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

例如:

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

如果你想要一组

NSString

© www.soinside.com 2019 - 2024. All rights reserved.