Недавно я видел пример кода в видео WWDC от инженера Apple. Он использовал NSArray
метод enumerateObjectsUsingBlock:
, но я заметил, что первый аргумент для блока был не id
, как я привык, но был изменен на конкретный тип, который, как знал разработчик, был в массиве .
Например, я только что попробовал в XCode, и все работает правильно:
NSArray *test = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
[test enumerateObjectsUsingBlock:^(NSString *aString, NSUInteger idx, BOOL *stop) {
// ...
}];
Объявление для enumerateObjectsUsingBlock:
объявляет первый аргумент блока типа id
:
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
Теперь я понимаю, что id
может использоваться для представления любого типа target-c, но этот маленький трюк с аргументами был мне неизвестен.
Есть ли документация для этой функции языка? Можно ли это использовать в обычных методах, где у вас тоже есть аргумент (id)sender
? Это даже безопасно или полностью поддерживается?