有没有办法将数组中包含的每个NSNumber乘以10? 以下是我到目前为止的情况:
NSMutableArray *vertex = [NSMutableArray arrayWithCapacity:3];
[vertex addObject:[NSNumber numberWithFloat:1.0]];
[vertex addObject:[NSNumber numberWithFloat:2.0]];
[vertex addObject:[NSNumber numberWithFloat:3.0]];
[vertex makeObjectsPerformSelector:@selector(doSomethingToObject:)];
我不确定使用哪个选择器来做这件事,请帮忙!
答案 0 :(得分:2)
不容易,不。你必须循环遍历整个事物并用NSNumber的新实例替换所有NSNumber实例(NSNumber本身是不可变的)。所以,例如:
for( int i = 0; i < [vertex count]; i++ )
[vertex replaceObjectAtIndex:i withObject:[NSNumber numberWithFloat:[[vertex objectAtIndex:i] floatValue] * 10.0f]];
显然这很难读。如果您要经常操作它们(例如,对它们应用转换),您可能最好只使用常规的原始浮点数组。(
答案 1 :(得分:0)
简短回答 - 不。
仅仅是原始值的容器的NSNumber。它没有做任何数学工作。 makeObjectsPerformSelector方法可用于告诉数组中的每个对象执行某些操作。但是每个对象的类必须具有选择器所用的方法。 NSNumber也不提供任何更改存储值的方法。因此,即使您向NSNumber添加了一个类别来进行数学运算,您仍然必须用新计算的值替换数组中的旧值。
我认为更好的解决方案是向NSMutableArray添加一个类别方法来完成工作。它会查看内容,计算每个新值,然后用新的数组成员替换每个数组成员。