Есть ли способ применить блок ко всем объектам массива?
Допустим, у меня есть удивительный блок:
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.
У меня нет особого смысла; Мне просто было любопытно узнать о других возможных способах написать это.
Edit:
Можно использовать enumerateObjectsUsingBlock:
(Спасибо, paulbailey).
Затем вы должны объявить свой блок следующим образом:
void (^myAmazingBlock2)(id, NSUInteger, BOOL *) = ^(id aFooNumber, NSUInteger idx, BOOL *stop) {
NSLog(@"Amazing BLOCK 2 %@", aFooNumber);
};
[myArray enumerateObjectsUsingBlock:myAmazingBlock2];
К сожалению, быстрый цикл перечисления остается наиболее читаемым решением.