Supposons que j'ai une méthode avec la signature:Quelle est la bonne façon d'encapsuler [NSString stringWithFormat:]?
+ (NSString *) myFormattedString:(NSString *)format, ...;
Et je veux qu'il préfixer une chaîne de mon choix (par exemple @ « Foo: »). Je suppose que le meilleur moyen est d'utiliser [myString initWithFormat: arguments:], mais comment implémenteriez-vous cette méthode?
J'ai essayé de faire ce qui suit, mais je reçois l'avertissement comme indiqué dans le commentaire:
+ (NSString *) myFormattedString:(NSString *)format, ... {
char *buffer;
[format getCString:buffer maxLength:[format length] encoding:NSASCIIStringEncoding];
va_list args;
va_start(args, buffer); // WARNING: second parameter of 'va_start' not last named argument
NSString *str = [[NSString alloc] initWithFormat:format arguments:args];
[str autorelease];
return [NSString stringWithFormat:@"Foo: %@.", str];
}
La raison pour laquelle je suppose va_start() peut prendre dans un (char *) est à cause de l'exemple que j'ai vu sur le
manual page of STDARG(3). N'hésitez pas à réécrire complètement la méthode si je le fais totalement faux.
Woops, j'ai mal compris comment fonctionne va_start(). Je suppose que http://numbergrinder.com/node/35 ne l'explique pas assez clairement. Je pensais que le deuxième paramètre à va_start() était le nombre réel de combien de paramètres ont été envoyés à la fonction; et qu'il y avait une «surcharge» qui contenait une chaîne de format qui déterminait le nombre basé sur le nombre de% non-échappés présents dans la chaîne de format ... Wow cela rend tellement plus facile que vous n'avez pas à déterminer le compte toi-même. Merci pour l'explication. – Senseful