我编写了一个具有属性的类,我想将此类的实例添加到一个可变数组中,之后我想设置实例的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;
}
我不知道如果我的语法错了,或者可能无法在数组中设置对象的属性
答案 0 :(得分:7)
你走了:
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>];
}
答案 1 :(得分:3)
array[1].num = 3;
这样可行,但问题是,如果将对象放入数组中,编译器将丢失有关对象的类型信息的跟踪。运行时仍然可以识别它是什么类型的对象。您只需礼貌地通知编译器。
((ClassA *)(array[1])).num = 3;