быстрое перечисление для массива, содержащего разные типы объектов

Если у меня есть NSMutableArray, куда я добавил объекты разных классов (например, NSString, NSMutableString, NSProcessInfo, NSURL, NSMutableDictionary и т. д.), теперь я хочу быстро перечислить этот массив, поэтому я попробовал:

for (id *element in mutableArray){
   NSLog (@"Class Name: %@", [element class]);
   //do something else
}

Я получаю предупреждение в Xcode о том, что

warning: invalid receiver type "id*"

Как избежать этого предупреждения?


person Dev    schedule 12.08.2009    source источник


Ответы (1)


Код почти правильный. Когда вы используете id, это уже подразумевается как указатель, поэтому вы должны написать его как:

for (id element in mutableArray){
   NSLog (@"Class Name: %@", [element class]);
   //do something else
}
person pgb    schedule 12.08.2009
comment
и вы также, вероятно, захотите [element className], а не [element class]. - person Dave DeLong; 12.08.2009
comment
хорошо, class также правильно печатает имя, однако className имеет больше смысла при чтении кода ... спасибо за совет! - person Dev; 13.08.2009
comment
На самом деле, -className не предназначен для этой цели. Этот метод предназначен для интеграции сценариев в Cocoa. -[Описание класса] должно давать правильный результат, но если вы хотите быть педантичным, NSStringFromClass([класс элемента]) более правильный - person kperryua; 13.08.2009