[英]how to set a property of an object inside a NSArray
我已经编写了一个具有属性的类,我想将该类的实例添加到可变数组中,然后再设置实例的num属性。 但我不知道正确的语法。 请告诉我正确的语法或方法。
@interface ClassA : NSObject
@property int num;
-(void) method;
+(id) getClassAObj:(int)number;
@end
--------------------------------
#import "ClassA.h"
@implementation ClassA
@synthesize num;
-(void) method{
NSLog(@"ClassA method Called");
}
+(id) getClassAObj:(int)number {
ClassA *obj = [[ClassA alloc] init];
obj.num = number;
return obj;
}
@end
-----------------------
现在在主要我想手动设置num属性,但我不知道正确的语法是什么
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
NSMutableArray *array = [NSMutableArray arrayWithObjects:
[ClassA getClassAObj:9],
[ClassA getClassAObj:4], nil];
NSLog(@"%i",[[array objectAtIndex:0] num]);
NSLog(@"%i",[array[1] num]);
//array[1].num = 3; <--- Help needed here
//[[array[1]]num 3]; <--- this is also not correct syntax
NSLog(@"%i",[array[1] num]);
}
return 0;
}
我不知道如果我语法错误,或者可能无法在数组内设置对象的属性
干得好:
ClassA *anObject = array[<index>];
[anObject setNum:<yourNumber>];
您也可以使用[<array> objectAtIndex:<index>]
方法,但是以上是更新的方法。
祝好运!
编辑:
如果您想验证对象(因此它不会崩溃,但也不会按预期工作),您的代码如下所示:
id anObject = array[<index>];
if ([anObject isKindOfClass:[NSClassFromString(@"ClassA")]]) {
[(ClassA *)anObject setNum:<number>];
}
如果要验证准确的消息(在这种情况下为setter),则应检查对象是否响应此选择器。 当您有不同类的对象,但是它们都响应消息时,这很有用。 它看起来像这样:
id anObject = array[<index>];
if ([anObject respondsToSelector:@selector(setNum:)) {
[anObject setNum:<number>];
}
array[1].num = 3;
这将起作用,但是问题是,如果将对象放入数组,则编译器会丢失有关该对象的类型信息。 运行时仍可以识别它是哪种对象。 您只需要礼貌地告知编译器。
((ClassA *)(array[1])).num = 3;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.