objective c - BOOL a NSString
objective-c boolean (8)
Si tengo un método que devuelve un BOOL
, ¿cómo lo NSString
a un NSString
para que pueda imprimirlo en la consola?
Por ejemplo, intenté hacer esto, lo que no funciona:
NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Pero realmente quiero convertir 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?
En el fondo, BOOL actúa como un tipo int para que pueda usar% i para probar el 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
En primer lugar, debe agregar un especificador de formato %@
. Debe tener un aspecto como este:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
También puede extraer una conversión de BOOL
a NSString
con función extern como lo hizo Apple con NSStringFromCGRect
, NSStringFromClass
, etc.
Cree un archivo utils o agregue al encabezado de los existentes el siguiente código:
//NSString+TypeConversion.h
extern NSString *NSStringFromBOOL(BOOL aBool);
Y también agregue el siguiente código en la implementación:
//NSString+TypeConversion.m
NSString *NSStringFromBOOL(BOOL aBool)
{
return aBool ? @"YES" : @"NO";
}
Entonces ahora puede usar 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]]));
Esto es trabajo para mí:
NSLog(@"The BOOL value is %@", theBoolValue ? "YES" : "NO");
Imprimes un BOOL así:
NSLog(@"The BOOL value is %s", theBoolValue ? "YES" : "NO");
O bien, con la nueva notación @
, uno podría hacer:
NSLog(@"The BOOL value is %@", @(theBoolValue));
NSLog usa un formato de invocación simple de estilo de impresión, su texto, y su ejemplo de código falta la secuencia de caracteres necesaria para incrustar un objeto.
Esto debería funcionar:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Necesita un especificador de formato en su cadena de formato:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Por lo tanto, sé que esto es realmente viejo, pero pensé que sería mejor lanzar mi solución al ring. Hago:
#define NSStringFromBOOL(aBOOL) ((aBOOL) ? @"YES" : @"NO")
NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass: [NSString class]]);
Siento que esto está más en línea con algunas de las macros de NSStringFromClass
de Apple ( NSStringFromClass
, NSStringFromRect
, NSStringFromSelector
, etc.), y en general es bastante fácil de usar sobre la marcha. ¡Solo asegúrese de poner esa macro en un lugar accesible globalmente o con frecuencia importada!
Use un operador ternario :
BOOl isKind= [thing isKindOfClass:[NSString class]];
NSLog(@"Is Kind of NSString: %d", isKind);
NSLog(@"Is Kind of NSString: %@", isKind ? @"YES" : @"NO");