Это не похоже ни на что.
Тип foo
в части for()
является лишь подсказкой для компилятора, поэтому он может выдавать соответствующие сообщения об ошибках.Во время выполнения все объекты являются просто объектами, и пока все они реализуют методы, используемые в блоке, ошибок не будет.Например:
NSString* aString = @"20";
[anArray addObject: aString];
for (NSNumber* foo in anArray)
{
NSLog(@"%d", [foo intValue]);
}
будет перебирать все объекты в массиве и отправлять intValue каждому независимо от того, какого типа они , включая NSString в конце.Если каждый объект реализует intValue
, он будет работать просто отлично (как NSString).Если в массиве есть объект, который не реализует intValue, скорее всего будет сгенерировано исключение.