繁体   English   中英

如何在NSArray中设置对象的属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM