objective c - ¿Cuál es el equivalente de Objective-C para "toString()", para usar con NSLog?
(5)
¿Hay algún método que pueda anular en mis clases personalizadas para que cuando
NSLog(@"%@", myObject)
se llama, imprimirá los campos (o lo que yo considere importante) de mi objeto? Supongo que estoy buscando el equivalente de Objective-C de Java''s toString()
.
Agregue esto a @implementation
de su clase de Foto:
- (NSString *)description {
return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}
Es el método de instancia de description
, declarado como:
- (NSString *)description
Aquí hay una implementación de ejemplo (gracias a Grahamparks):
- (NSString *)description {
return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
Esto generará las voces disponibles:
NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
Hay dos funciones que puedes usar.
- (NSString*)description
Esto se mostrará cuando coloque su objeto como, por ejemplo, un parámetro para NSLog
. La otra función de descripción es:
- (NSString*)debugDescription
Se po anInstanceOfYourClass
cuando haga po anInstanceOfYourClass
en la ventana del comando de depuración. Si su clase no tiene una función debugDescription
, entonces se llamará a la description
.
Tenga en cuenta que la clase base NSObject
tiene una description
implementada, pero es bastante NSObject
: solo muestra la dirección del objeto. Es por eso que le recomiendo que implemente la description
en cualquier clase de la que desee obtener información, especialmente si usa el método de description
en su código. Si utiliza la description
en su código, le sugiero que implemente debugDescription
también, haciendo que debugDescription
más detallado.
Puede anular el método de descripción de NSObject:
- (NSString *)description
Sobre el tema del registro, recomiendo esta publicación de blog para un mejor registro en Objective-C.