我在 .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
。
您的 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
。