Wie drucke ich ein Boolesches Flag in NSLog?

311

Gibt es eine Möglichkeit, den Wert des Booleschen Flags in NSLog zu drucken?

Devang
quelle

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.

BoltClock
quelle
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
SashaQbl
quelle
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

Chandan Shetty SP
quelle
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

arcticmatt
quelle
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
Xizor
quelle
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
8

Apples FixIt lieferte% hhd, was mir den Wert meines BOOL korrekt gab.

green_knight
quelle
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);
user3182143
quelle
2
NSArray *array1 = [NSArray arrayWithObjects:@"todd1", @"todd2", @"todd3", nil];
bool objectMembership = [array1 containsObject:@"todd1"];
NSLog(@"%d",objectMembership);  // prints 1 or 0
Saqib R.
quelle
2

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

let flag = true
print(flag) //true
Tamás Sengel
quelle
1

So können Sie es machen:

BOOL flag = NO;
NSLog(flag ? @"YES" : @"NO");
SAQIB SOHAIL BHATTI
quelle
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"));
Kursat Turkay
quelle
(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