数组上对象的属性(Objective-c)

Zau*_*aur 3 arrays iphone properties object objective-c

我有一个NSObject名为test.
class的类test有3个属性.Name,age,id,
我在测试类中有3个对象.s,b,c.
我将所有对象放到数组中:NSArray *ary = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
我试图访问该数组中属性的数据.这意味着我必须阅读,在循环中写入对象的属性(for循环或while循环).
我在网上找到了很多资料.我接近做的方法是:

[[ary objectAtIndex:0] setName:@"example"];
Run Code Online (Sandbox Code Playgroud)

这种方法适用于setter和getter.但它确实给出了一个可怕的错误.有没有"工作"的方法呢?
谢谢...

Rob*_*Rob 12

让我们想象一个Person类:

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic) NSInteger age;
@property (nonatomic) long long identifier;

+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age identifier:(long long)identifier;

@end

@implementation Person

+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age identifier:(long long)identifier {
    Person *person = [[self alloc] init];
    person.name = name;
    person.age = age;
    person.identifier = identifier;

    return person;
}

@end
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建一组人,如下所示:

NSArray *people = @[[Person personWithName:@"Rob" age:32 identifier:2452323],
                    [Person personWithName:@"Rachel" age:29 identifier:84583435],
                    [Person personWithName:@"Charlie" age:4 identifier:389433]];
Run Code Online (Sandbox Code Playgroud)

然后,您可以提取一组人名,如下所示:

NSArray *names = [people valueForKey:@"name"];
NSLog(@"%@", names);
Run Code Online (Sandbox Code Playgroud)

这将产生:

2013-09-27 14:57:13.791 MyApp[33198:a0b] (
    Rob,
    Rachel,
    Charlie
)
Run Code Online (Sandbox Code Playgroud)

如果要提取有关第二个的信息Person,那将是:

Person *person = people[1];
NSString *name = person.name;
NSInteger age = person.age;
long long identifier = person.identifier;
Run Code Online (Sandbox Code Playgroud)

如果你想改变第三人的年龄,那将是:

Person *person = people[2];
person.age = 5;
Run Code Online (Sandbox Code Playgroud)

或者,如果您想迭代数组以提取信息,您也可以这样做:

for (Person *person in people) {
    NSString *name = person.name;
    NSInteger age = person.age;
    long long identifier = person.identifier;

    // now do whatever you want with name, age, and identifier
}
Run Code Online (Sandbox Code Playgroud)