¿Cuál es el equivalente de Objective-C para “toString ()”, para su uso con NSLog?
-
12-09-2019 - |
Pregunta
¿Hay un método que puedo anular en mis clases personalizadas para que cuando
NSLog(@"%@", myObject)
se llama, se imprimirá los campos (o lo que sea que considero importante) de mi objeto? Creo que estoy buscando el Objective-C equivalente de toString()
de Java.
Solución
Es el método de instancia description
, declarada como:
- (NSString *)description
Aquí hay un ejemplo de implementación (gracias a grahamparks):
- (NSString *)description {
return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
Otros consejos
Esto, unido al @implementation
de su clase Photo:
- (NSString *)description {
return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
Puede reemplazar el método descripción de NSObject:
- (NSString *)description
En el tema de la tala Recomiendo este publicar para un mejor registro en Objective-C.
Hay dos funciones que se pueden utilizar.
- (NSString*)description
Esto se mostrará cuando se pone el objeto como, es decir, un parámetro para NSLog
. La otra función de descripción es:
- (NSString*)debugDescription
Esto se llama cuando no po anInstanceOfYourClass
en la ventana de comandos de depuración. Si la clase no tiene una función debugDescription
, a continuación, sólo description
será llamado.
Tenga en cuenta que la NSObject
clase base hace description
tiene implementado, pero es bastante escueto: sólo se muestra la dirección del objeto. Esto es por eso que recomendamos que implemente description
en cualquier clase que desea obtener información de, sobre todo si se utiliza el método description
en el código. Si usted hace uso de description
en su código, le sugiero que implementa debugDescription
así, también haciendo debugDescription
más prolija.
Esta es la salida de las voces disponibles:
NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));