Stringa di formattazione Objective-C per booleano?


Risposte:


173

Un modo per farlo è convertire in stringhe (poiché ci sono solo due possibilità, non è difficile):

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

Non penso che ci sia un identificatore di formato per i valori booleani.


2
Le stringhe di output non dovrebbero essere: "Sì" e "No": P
Ben S

131
O "Torta" e "Nessuna torta". Qualunque cosa ti si addica.
Michael Myers

2
Amo la torta e niente torta! Sostituirò tutte le mie x? @ "YES": @ "NO" codice con x? @ "Cake": @ "No Cake" immediatamente: D - beh, almeno per le descrizioni dei miei oggetti comunque;)
Jason Coco

8
Oppure TheCakeIsALie e TheCakeIsNotALie.
Warren P

3
% hhd è il modo corretto per visualizzare il valore booleano come flag intero come 0 o 1. 0 è falso 1 è vero.
Onder OZCAN

69

io raccomanderei

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

perché, um, BOOLs sono chiamati YESo NOin Objective-C.


2
Sembra un ovvio punto di utilità per una macro o una funzione (se non altro per evitare la propagazione di stringhe letterali in tutta l'app).
Warren P

Solo che non è veramente necessario evitare la "propagazione" di tali stringhe - poiché ObjC coallescerà istanze con lo stesso valore di stringhe immutabili (e altri oggetti) - in modo tale che solo una copia risieda in memoria. La macro è OK, la funzione è OK e anche il copia e incolla va bene.
Motti Shneor

52

Usa il formattatore intero %d, che stamperà 0o 1:

NSLog(@"%d", myBool);

23

In Objective-C, il BOOLtipo è solo un carattere con segno. Da <objc/objc.h>:

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

Quindi puoi stamparli usando il %dformattatore Ma questo stamperà solo a 1o a 0, non YESo NO.

Oppure puoi semplicemente usare una stringa, come suggerito in altre risposte.


1
% C non proverà a stampare il carattere ASCII 0 o 1 che sono entrambi caratteri di controllo?
JeremyP

21

Aggiungi questa funzione inline al tuo .hfile:

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

Ora sei pronto per partire ...

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


1

Basta aggiungere la funzione seguente e passarle il BOOLvalore e il metodo restituirà il fileNSString

- (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

Credo che il modo più semplice per farlo sia:

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

@(espressione)

Valuta dinamicamente l'espressione boxed e restituisce il valore letterale dell'oggetto appropriato in base al suo valore (ad esempio NSString per const char *, NSNumber per int, ecc.).


0

Ho creato una categoria di NSString con questo

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

E usalo in questo modo:

[NSString stringWithBool:boolValue];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.