web-dev-qa-db-fra.com

Quel est l'équivalent d'Objective-C pour "toString ()", à utiliser avec NSLog?

Existe-t-il une méthode que je peux remplacer dans mes classes personnalisées afin que, lorsque

      NSLog(@"%@", myObject) 

s’appelle, cela imprimera les champs (ou tout ce que j’estime important) de mon objet? Je suppose que je recherche l'équivalent Objective-C de la fonction toString() de Java.

167
George Armhold

C'est la méthode d'instance description, déclarée comme suit:

- (NSString *)description

Voici un exemple d'implémentation (merci à grahamparks):

- (NSString *)description {
   return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
247
zakovyrya

Ajoutez ceci au @implementation de votre cours de photo:

- (NSString *)description {
   return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
35
grahamparks

Vous pouvez remplacer la méthode de description de NSObject:

- (NSString *)description

Au sujet de la journalisation, je recommande ceci article de blog pour une meilleure connexion à Objective-C.

24
teabot

Vous pouvez utiliser deux fonctions.

- (NSString*)description

Ceci sera affiché quand vous mettez votre objet en tant que, I.E. un paramètre pour NSLog. L'autre fonction de description est:

- (NSString*)debugDescription

Cela sera appelé quand vous ferez po anInstanceOfYourClass dans la fenêtre de commande de débogage. Si votre classe n'a pas de fonction debugDescription, alors seulement description sera appelé.

Notez que la classe de base NSObject a description implémentée, mais elle est assez simple: elle affiche uniquement l'adresse de l'objet. C'est pourquoi je vous recommande d'implémenter description dans toutes les classes pour lesquelles vous souhaitez obtenir des informations, en particulier si vous utilisez la méthode description dans votre code. Si vous utilisez description dans votre code, je vous suggère également d'implémenter debugDescription, en rendant également debugDescription plus verbeux.

13
MaddTheSane

Cela produira les voix disponibles:

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
1
grigb