¿Cadena de formato de Objective-C para booleano?


Respuestas:


173

Una forma de hacerlo es convertir a cadenas (dado que solo hay dos posibilidades, no es difícil):

NSLog(@" %s", BOOL_VAL ? "true" : "false");

No creo que haya un especificador de formato para valores booleanos.


2
¿No deberían ser las cadenas de salida: "Sí" y "No": P
Ben S

131
O "Pastel" y "Sin pastel". Lo que te venga bien.
Michael Myers

2
¡Amo el pastel y no el pastel! Voy a reemplazar todos mis códigos x? @ "YES": @ "NO" con x? @ "Cake": @ "No Cake" inmediatamente: D - bueno, al menos para las descripciones de mis objetos de todos modos;)
Jason Coco

8
O TheCakeIsALie y TheCakeIsNotALie.
Warren P

3
% hhd es la forma correcta de mostrar el valor booleano como indicador de número entero como 0 o 1. 0 es falso 1 es verdadero.
Onder OZCAN

69

yo recomendaria

NSLog(@"%@", boolValue ? @"YES" : @"NO");

porque, um, BOOLs se llaman YESo NOen Objective-C.


2
Parece un lugar de utilidad obvio para una macro o una función (aunque solo sea para evitar la propagación de cadenas literales en toda la aplicación).
Warren P

Solo que realmente no es necesario evitar la "propagación" de tales cadenas, ya que ObjC genera instancias del mismo valor de cadenas inmutables (y otros objetos), de modo que solo una copia resida en la memoria. La macro está bien, la función está bien y copiar y pegar también está bien.
Motti Shneor

52

Utilice el formateador de enteros %d, que imprimirá 0o 1:

NSLog(@"%d", myBool);

23

En Objective-C, el BOOLtipo es solo un carácter firmado. De <objc/objc.h>:

typedef signed char BOOL;
#define YES         (BOOL)1
#define NO          (BOOL)0

Entonces puedes imprimirlos usando el %dformateador Pero eso solo imprimirá a 1o a 0, no YESo NO.

O simplemente puede usar una cadena, como se sugiere en otras respuestas.


1
¿No intentará% c imprimir el carácter ASCII 0 o 1, ambos caracteres de control?
JeremyP

21

Agregue esta función en línea a su .harchivo:

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

Ahora estás listo para ir...

NSLog(@"%@", NSStringFromBOOL(BOOL_VAL));


1

Simplemente agregue la función a continuación y pásele el BOOLvalor y el método devolverá elNSString

- (NSString *)boolValueToString:(BOOL)theBool {
    if (theBool == 0)
        return @"NO"; // can change to No, NOOOOO, etc
    else
        return @"YES"; // can change to YEAH, Yes, YESSSSS etc
}

1

Creo que la forma más sencilla de hacer esto es:

NSLog(@" %@", @(BOOL_VAL));

@(expresión)

Evalúa dinámicamente la expresión en caja y devuelve el objeto literal apropiado en función de su valor (es decir, NSString para const char *, NSNumber para int, etc.).


0

Creé una categoría de NSString con esto

+ (instancetype)stringWithBool:(BOOL)boolValue {
return boolValue ? @"YES" : @"NO";
}

Y utilícelo así:

[NSString stringWithBool:boolValue];
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.