混淆枚举...如何更改枚举过程中的对象?
仍然不熟悉Objective-C和我感到困惑枚举...混淆枚举...如何更改枚举过程中的对象?
比方说,我有8个“车”对象和所有的人的一个NSArray有自己的“paintColor”属性设置为“红色。我想通过数组枚举并设置每个Car.paintColor属性设置为“蓝色”,我该怎么办呢?
for (Car *car in myArray){
car.paintColor = @"blue";
}
不过,如果我做
Car *testCar = [myArray objectAtIndex:2];
NSLog(@"The car color for 3rd object in myArray is %@", testCar.color);
我仍然获得“红”。所以看来枚举只是创建一个临时对象,但不是mod ify数组中包含的实际对象。
什么是正在做我想做的事情?我有很多的情况下我想通过一个数组枚举,但实际上改变在阵列内
感谢
--edit
好的项目,感谢信息..你能解释一下为什么这不起作用?
我有一个名为“carsArray”的NSArray设置为包含三个NSMutable字符串对象(“Buick”,“Bronco”,“Cadillac”)的属性。
我再做
for (NSMutableString *car in myArray) {
car = [NSMutableString stringWithFormat:@"test"];
}
NSMutableString *temp = [myArray objectAtIndex:2];
NSLog(@"third car is %@", temp);
的NSLog是说 “凯迪拉克”。它不应该是“测试”吗?
做你想做什么:
for (NSMutableString *car in myArray) {
[car setString:[NSMutableString stringWithFormat:@"test"]];
}
指针的基本认识。这不是特别枚举,使得它以这种方式工作。
NSMutableString *car1 = [NSMutableString stringWithFormat:@"Cadillac"];
NSMutableString *car = car1;
[car setString:[NSMutableString stringWithFormat:@"Ford"]];
NSLog(@"car1 = %@", car1);
// Ford
car = [NSMutableString stringWithFormat:@"Buick"];
NSLog(@"car1 = %@", car1);
// Ford
当您订车= CAR 1,汽车是一个 “别名” 为CAR 1。您可以在汽车上设置属性,并将属性设置在car1上。您可以在汽车上调用像setString这样的方法,该方法将在car1上调用。 car和car1是指针,它们指向相同的对象。
当您将赋值给一个新值给汽车时,它只是使其成为另一个对象的别名,不再是与car1相同的对象。此作业不会影响car1,也不会影响您之后在汽车上使用的任何财产访问者或方法。
该枚举有效地依次执行car = myArray[0]
,car = myArray[1]
,car = myArray[2]
。 (速记:myArray[0]
是不正确的Objective-C语法。)
快速枚举不会复制对象也不会创建临时副本。 NSArray是指向对象的指针的数组。快速枚举只是通过指针列表循环,每次循环都会得到下一个指针。指针指向数组指向的同一个对象。
您在快速枚举循环中更改对象内容的方式没问题。
您的问题在别处(请参阅Mattia的评论)。
我已经添加了一个编辑..你知道那是行不通的吗? – sayguh
枚举不应该产生临时值。有一件事我注意到,在你调用NSLog的时候你正在读取颜色属性,但在枚举器中你正在设置paintColor属性。它可能是一个简单的类型是搞砸了吗? – Mattia
感谢您的信息。我已经添加了第二个示例,我想知道为什么那个不起作用 – sayguh