¿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.

Michael Myers
fuente
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.

Yuji
fuente
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);
Erin Geyer
fuente
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.

mipadi
fuente
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));
gigahari
fuente
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
}
Bryan Norden
fuente
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.).

asamoylenko
fuente
0

Creé una categoría de NSString con esto

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

Y utilícelo así:

[NSString stringWithBool:boolValue];
xlsmearlx
fuente