有没有一种方法可以将块应用于数组的所有对象?

假设我有一个惊人的障碍:

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

10-02 13:24