Wie drucke ich ein Boolesches Flag in NSLog?


Antworten:


503

So mache ich das:

BOOL flag = YES;
NSLog(flag ? @"Yes" : @"No");

?: ist der ternäre bedingte Operator des Formulars:

condition ? result_if_true : result_if_false

Ersetzen Sie die tatsächlichen Protokollzeichenfolgen gegebenenfalls entsprechend.


55
Einfach, dies auch ein Makro zu machen:#define StringFromBOOL(b) ((b) ? @"YES" : @"NO")
jscs

3
Wie hat das so viele Stimmen? Auf diese Weise wird NICHT ein boolescher Wert protokolliert. Auf diese Weise werden abhängig von einem booleschen Wert unterschiedliche Werte protokolliert.
Acey

7
@Acey: Anscheinend waren die Leute (einschließlich des ursprünglichen Fragestellers) mehr an letzterem interessiert. Wenn ich eine Vermutung wagen sollte, liegt es daran, dass das direkte Drucken des Werts (0/1) nicht sehr aussagekräftig ist.
BoltClock

1
@BoltClock 0/1 ist in der Protokollausgabe nicht sinnvoll? Ich dachte wir
wären

298

%d, 0 ist FALSE, 1 ist TRUE.

BOOL b; 
NSLog(@"Bool value: %d",b);

oder

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

Auf der Grundlage von Datentypänderungen %@wie folgt

For Strings you use %@
For int  you use %i
For float and double you use %f

16

Boolesche Werte sind nichts anderes als ganze Zahlen. Sie sind nur typgesteuerte Werte wie ...

typedef signed char     BOOL; 

#define YES (BOOL)1
#define NO (BOOL)0

BOOL value = YES; 
NSLog(@"Bool value: %d",value);

Wenn der Ausgang 1 ist, JA, andernfalls NEIN


1
Nein, Bool ist signed char. Ihr Ausdruck kann möglicherweise falsch ausgewertet werden, wenn ein anderer Wert als 0 oder 1 angegeben wird.
CodaFi

Nein, der Typ von BOOL hängt von Ihrem Compiler ab (32 vs 64 Bit) und ist oft nicht der gleiche Typ wie bool. bool hingegen ist bool, ein Standardtyp, der nicht mit signiertem Zeichen identisch ist.
Gnasher729

14

Beachten Sie, dass Sie dies in Swift einfach tun können

let testBool: Bool = true
NSLog("testBool = %@", testBool.description)

Dies wird protokolliert testBool = true


In Swift können Sie einfach verwenden print().
Dmitry

10

Obwohl dies keine direkte Antwort auf Devangs Frage ist, glaube ich, dass das folgende Makro für Leute, die BOOLs protokollieren möchten, sehr hilfreich sein kann. Dadurch wird der Wert des Bools abgemeldet und automatisch mit dem Namen der Variablen gekennzeichnet.

#define LogBool(BOOLVARIABLE) NSLog(@"%s: %@",#BOOLVARIABLE, BOOLVARIABLE ? @"YES" : @"NO" )

BOOL success = NO;
LogBool(success); // Prints out 'success: NO' to the console

success = YES;
LogBool(success); // Prints out 'success: YES' to the console

Ein nützliches Makro, insbesondere mit dem Trick, den Variablennamen anzuzeigen. Persönlich würde ich BOOL nicht als Parameternamen verwenden, um Verwirrung zu vermeiden.
jk7


4

Wir können auf vier Arten überprüfen

Der erste Weg ist

BOOL flagWayOne = TRUE; 
NSLog(@"The flagWayOne result is - %@",flagWayOne ? @"TRUE":@"FALSE");

Der zweite Weg ist

BOOL flagWayTwo = YES; 
NSLog(@"The flagWayTwo result is - %@",flagWayTwo ? @"YES":@"NO");

Der dritte Weg ist

BOOL flagWayThree = 1;
NSLog(@"The flagWayThree result is - %d",flagWayThree ? 1:0);

Der vierte Weg ist

BOOL flagWayFour = FALSE; // You can set YES or NO here.Because TRUE = YES,FALSE = NO and also 1 is equal to YES,TRUE and 0 is equal to FALSE,NO whatever you want set here.
NSLog(@"The flagWayFour result is - %s",flagWayFour ? YES:NO);

2
NSArray *array1 = [NSArray arrayWithObjects:@"todd1", @"todd2", @"todd3", nil];
bool objectMembership = [array1 containsObject:@"todd1"];
NSLog(@"%d",objectMembership);  // prints 1 or 0

2

In Swift können Sie einfach einen booleschen Wert drucken, der als trueoder angezeigt wird false.

let flag = true
print(flag) //true

1

So können Sie es machen:

BOOL flag = NO;
NSLog(flag ? @"YES" : @"NO");

Dies ist im Grunde eine Wiederholung eines Teils der Antwort von @BoltClock vor vier Jahren.
jk7

0
//assuming b is BOOL. ternary operator helps us in any language.
NSLog(@"result is :%@",((b==YES)?@"YES":@"NO"));

(b == JA) ist dasselbe wie nur b. Wie aufgelistet, verlassen Sie sich auf den Optimierer des Compilers, um ihn wieder auf (b? @ "YES": @ "NO") zu reduzieren
Armand
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.