Los puntos suspensivos (...) se hereda de C; puede usarlo solo como el argumento final en una llamada (y ha perdido la coma relevante en su ejemplo). Así, en su caso, usted probablemente querrá:
+ (void)doSomethingToObjects:(id)firstObject, ...;
o, si desea que el recuento sea explícita y puede pensar en una forma de expresarlo así:
+ (void)doManyTimes:(NSInteger)numberOfTimes somethingToObjects:(id)firstObject, ...;
A continuación, puede utilizar la métodos normales de C para tratar con elipses, que residen en stdarg.h. Hay una documentación rápida de los here, ejemplo de uso sería:
+ (void)doSomethingToObjects:(id)firstObject, ...
{
id object;
va_list argumentList;
va_start(argumentList, firstObject);
object = firstObject;
while(1)
{
if(!object) break; // we're using 'nil' as a list terminator
[self doSomethingToObject:object];
object = va_arg(argumentList, id);
}
va_end(argumentList);
}
EDIT: adiciones, en respuesta a los comentarios. No puede pasar varias cosas entregadas en una elipsis a otra función que toma puntos suspensivos debido a la forma en que C maneja la función de invocación (que es heredada por Objective-C, aunque obviamente no). En cambio, tiendes a pasar la va_list. P.ej.
+ (NSString *)doThis:(SEL)selector makeStringOfThat:(NSString *)format, ...
{
// do this
[self performSelector:selector];
// make string of that...
// get the argument list
va_list argumentList;
va_start(argumentList, format);
// pass it verbatim to a suitable method provided by NSString
NSString *string = [[NSString alloc] initWithFormat:format arguments:argumentList];
// clean up
va_end(argumentList);
// and return, as per the synthetic example
return [string autorelease];
}
¿Hay también una manera de tomar puntos suspensivos como parámetro y luego pasar a otro método? –
@Mats: normalmente obtiene la va_list y la pasa (por lo tanto, vprintf, o NSString -initWithFormat: arguments :). No se puede simplemente pasar lo que se describe por las elipsis (como en, hacer que una función de puntos suspensivos llame a otra), ya que el tiempo de ejecución de C no es necesario para saber cuánto material hay y, por lo tanto, no puede copiarlo. – Tommy
¿Puedes dar un ejemplo de código al pasar una elipsis a un segundo método objetivo-c? –