让我们说我创建了一个名为Rectangle的类。我创建了一个可变数组(称为allRectangles)并向数组中添加了四个不同的矩形:
前:
Rectangle *rect1 = [[Rectangle alloc] init];
[allRectangles addObject: rect1];
...重复了rect2,rect3和rect4
如果我使用迭代遍历数组
for (Rectangle *rect in allRectangles)
而我只想输出每个名称,我该怎么做?例如,如果我这样做:
NSLog(@"%@", rect)
它将打印类名和内存地址。我希望它打印rect1然后rect2等等...请帮助???
答案 0 :(得分:4)
代码段中的对象没有名称,至少没有显示。也就是说,Rectangle
类似乎没有name
属性或类似的东西。
我怀疑您将变量名称(例如rect1
)与对象名称混淆。它们不是同一件事。 rect1
是指向对象(Rectangle
类的实例)的指针变量,但该事实不会影响对象。一个对象可以在其生命周期中由许多不同的变量指向,但这并不意味着任何这些变量的名称是对象的名称。 (请注意,在你的for-in循环中,每个对象都由变量rect
指向。你是否期望这个事实导致对象被命名为“rect”?)
如果您希望对象具有类似“rect1”的名称,则需要向该类添加name
属性,并在您创建的每个对象上设置该属性。
答案 1 :(得分:0)
为什么不将元素存储在NSDictionary
而不是NSArray
中,并按变量名称检索它们?
NSMutableDictionary *dict = [NSMutableDictionary new] ;
Rectangle *rect1 = [[Rectangle alloc] init];
[dict setObject:rect1 forKey:@"rect1"];
for (NSString *key in [dict allKeys]) {
NSLog(@"%@ => %@", key, [dict objectForKey:key]);
}
答案 2 :(得分:0)
本地变量名称是源代码信息,它在您运行的代码中不存在,它甚至可以理解下面的“矩形名称”是什么
Rectangle * rect1 = [[Rectangle alloc] init];
Rectangle * rect2 = rect1;
rect1或rect2
如果您希望矩形具有名称,则必须为其指定属性,并在创建每个矩形时进行设置。