提问人:vedhanish 提问时间:11/9/2022 最后编辑:Joakim Danielsonvedhanish 更新时间:11/9/2022 访问量:74
如何在swift中读取objective-c数组?它总是返回零
How to read an objective-c array in swift? Its always returning nil
问:
我在 .h 文件中声明了一个 NSArray
@interface ClassName : NSObject
{
NSArray *myArray;
}
@property (nonatomic, strong) NSArray *myArray;
@end
在.m文件中,这是我拥有它的方式。
@implementation ClassName
NSArray* myArray;
我正在尝试以 swift 访问它,如下所示。
var x = ClassName().myArray
x 始终为零。
答:
0赞
HangarRash
11/9/2022
#1
您的 Objective-C 类存在几个问题。您已经声明了该属性(这很好),但您还在头文件中添加了一个同名的公共实例变量,并在 .m 文件中创建了一个同名的全局变量(不是实例变量)。以下是您应该具备的:myArray
在 .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
你会得到就像你使用 Objective-C 类一样。在这两种情况下,您都需要创建该类的实例并将初始值赋给 。nil
myArray
var c = ClassName()
c.myArray = [ "Hi", "There" ]
现在您可以访问该数组:
var x = c.myArray
顺便说一句 - 假设您希望数组保存特定类型的值,您应该更新 Objective-C 类中的属性声明。
例如:
@property (nonatomic, strong) NSArray<NSString *> *myArray;
如果您想要一个 .NSString
评论
ClassName
myArray
–init
myArray
myArray = [[NSArray alloc] init];
NSMutableArray