Qual è l'Objective-C equivalente per “toString ()”, per l'uso con NSLog?
-
12-09-2019 - |
Domanda
Esiste un metodo che posso ignorare nelle mie classi personalizzate in modo che quando
NSLog(@"%@", myObject)
si chiama, stamperà i campi (o qualsiasi altra cosa che ritengo importante) di mio oggetto? Credo che sto cercando l'Objective-C equivalente di toString()
di Java.
Soluzione
E 'il metodo di istanza description
, dichiarato come:
- (NSString *)description
Ecco un esempio di implementazione (grazie a grahamparks):
- (NSString *)description {
return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
Altri suggerimenti
Aggiungi questo al @implementation
della classe Foto:
- (NSString *)description {
return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
È possibile eseguire l'override del metodo di descrizione NSObject:
- (NSString *)description
A proposito della registrazione vi consiglio questo blog postare per una migliore registrazione in Objective-C.
Ci sono due funzioni che è possibile utilizzare.
- (NSString*)description
Questo verrà visualizzato quando si mette l'oggetto come, cioè un parametro per NSLog
. L'altra funzione descrizione è:
- (NSString*)debugDescription
Questo verrà chiamato quando non po anInstanceOfYourClass
nella finestra di comando di debug. Se la classe non ha una funzione debugDescription
, poi basta description
saranno chiamati.
Si noti che il NSObject
classe di base ha description
implementato, ma è piuttosto scarno: visualizza solo l'indirizzo dell'oggetto. Questo è il motivo per cui vi consiglio di implementare description
in ogni classe che si desidera ottenere informazioni fuori, soprattutto se si utilizza il metodo description
nel codice. Se si utilizza description
nel codice, vi suggerisco di implementare debugDescription
pure, anche facendo debugDescription
più prolisso.
Questa uscita volontà le voci disponibili:
NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));