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.
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];
}
Ajoutez ceci au @implementation
de votre cours de photo:
- (NSString *)description {
return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
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.
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.
Cela produira les voix disponibles:
NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));