有没有一种方法可以将块应用于数组的所有对象?
假设我有一个惊人的障碍:
void (^myAmazingBlock)(NSNumber *) = ^(NSNumber *aFooNumber) {
NSLog(@"Log message from an Amazing Block: %@", aFooNumber);
};
要将我的代码块应用于数组的所有对象,可以使用:
for (NSNumber *aNumber in myArray) {
myAmazingBlock(aNumber);
}
是否有可能摆脱快速枚举循环,并且在精神上类似于:
[myArray valueForKeyPath:@"@distinctUnionOfObjects.^myAmazingBlock"]; // This code doesn't work. It's just to show the style of what I'm trying to write.
我没有任何具体用途;我只是对其他可能的编写方式感到好奇。
编辑:
可以使用
enumerateObjectsUsingBlock:
(谢谢paulbailey)。然后,您必须像这样声明您的代码块:
void (^myAmazingBlock2)(id, NSUInteger, BOOL *) = ^(id aFooNumber, NSUInteger idx, BOOL *stop) {
NSLog(@"Amazing BLOCK 2 %@", aFooNumber);
};
[myArray enumerateObjectsUsingBlock:myAmazingBlock2];
不幸的是,快速枚举循环仍然是最易读的解决方案。
最佳答案
您可以使用enumerateObjectsUsingBlock:
吗?显然,您必须调整块的参数以匹配指定的参数。
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html