2009-04-10 12 views
58

Si tengo un método que devuelve BOOL, ¿cómo puedo convertirlo en NSString para que pueda imprimirlo en la consola?BOOL a NSString

Por ejemplo, he intentado hacer esto, lo que no está funcionando:

NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 

Pero realmente quieren convertir en realidad el valor de retorno en un NSString. Sé que es un tipo de datos primitivo, por lo que no puedo invocar métodos sobre él. ¿Tengo que crear una cadena por separado y luego usar Bool como parámetro en un método en NSString?

+2

El problema con su afirmación es simplemente que usted no incluyó ningún formato de especificadores en el primer argumento de NSLog. No tiene nada que ver con BOOL o no. –

Respuesta

63

Se necesita un especificador de formato en la cadena de formato:

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 
3

NSLog utiliza un formato simple invocación de estilo printf su texto, y su ejemplo de código falta la secuencia de caracteres necesario para incrustar un objeto.

Esto debería funcionar:

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 
64

Utilice un ternary operator:

BOOl isKind= [thing isKindOfClass:[NSString class]]; 

NSLog(@"Is Kind of NSString: %d", isKind); 
NSLog(@"Is Kind of NSString: %@", isKind ? @"YES" : @"NO"); 
+8

Te falta '@' al frente de esas cadenas. – willc2

+0

¡Gran truco! –

32

En los actos fondo BOOL como un tipo int para que pueda utilizar% i para la prueba de valor de un tipo BOOL en NSLog :

BOOL a = YES; 
BOOL b = NO; 
NSLog(@"a is %i and b is %i", a, b); 

// Output: a is 1 and b is 0 
+0

Gracias, esto funcionó muy bien +1 –

22

Por lo tanto, sé que esto es muy viejo, pero pensé que también podría lanzar mi s la disolución en el ring. Yo:

#define NSStringFromBOOL(aBOOL) ((aBOOL) ? @"YES" : @"NO") 
NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass: [NSString class]]); 

siento que esto es más de acuerdo con algunas de las macros de Apple a cadena (NSStringFromClass, NSStringFromRect, NSStringFromSelector, y así sucesivamente), y por lo general bastante simple de usar en la marcha. ¡Solo asegúrese de poner esa macro en un lugar globalmente accesible o importada con frecuencia!

+13

No es una buena idea prefijar cosas con NS-. Ese es el prefijo de Apple. Conduce a un poco de frustración cuando lo agregan más tarde y tus definiciones comienzan sutilmente en conflicto. – Chuck

+5

Pero, ¿qué haces cuando el objeto que estás revisando es * realmente nombrado * NSString? Llamarlo de otra forma no sería representativo de lo que está verificando. – chroipahtz

+2

De acuerdo con Chuck; la macro se llamaría mejor 'BOOLToNSString()'. @chroipahtz –

12

imprime un BOOL así:

NSLog(@"The BOOL value is %s", theBoolValue ? "YES" : "NO"); 

O, con la nueva @ notación, se podría hacer:

NSLog(@"The BOOL value is %@", @(theBoolValue)); 
+0

Este debería ser lo suficientemente bueno. – justinkoh

-1

Este es un trabajo para mí:

NSLog(@"The BOOL value is %@", theBoolValue ? "YES" : "NO"); 
+0

Eso no funcionará porque '" SÍ "' no responderá a '% @'. – Droppy

0

Antes que nada, debe agregar un especificador de formato %@. Se debe tener este aspecto:

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 

También se puede extraer una conversión BOOL-NSString con la función extern como hizo Apple con NSStringFromCGRect, NSStringFromClass etc.

crear el archivo de utilidades o añadir a los actuales los header el siguiente código:

//NSString+TypeConversion.h 

extern NSString *NSStringFromBOOL(BOOL aBool); 

y también añadir el siguiente código en la aplicación:

//NSString+TypeConversion.m 

NSString *NSStringFromBOOL(BOOL aBool) 
{ 
    return aBool ? @"YES" : @"NO"; 
} 

Así que ahora usted puede utilizar esta función en otros lugares y su código se vuelve más claro y reutilizable:

#import "NSString+TypesConversion.h" 

NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass:[NSString class]]));