Comment imprimer le drapeau booléen dans NSLog?

311

Existe-t-il un moyen d'imprimer la valeur du drapeau booléen dans NSLog?

Devang
la source

Réponses:

503

Voici comment je le fais:

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

?: est l'opérateur conditionnel ternaire de la forme:

condition ? result_if_true : result_if_false

Remplacez les chaînes de journal réelles en conséquence, le cas échéant.

BoltClock
la source
55
Facile à faire de cette macro aussi:#define StringFromBOOL(b) ((b) ? @"YES" : @"NO")
jscs
3
Comment cela a-t-il autant de votes? Ce n'est PAS comment enregistrer une valeur booléenne, c'est comment enregistrer différentes valeurs en fonction d'une valeur booléenne.
Acey
7
@Acey: Apparemment, les gens (y compris le demandeur d'origine) étaient plus intéressés par ce dernier. Si je devais risquer une supposition, c'est parce que l'impression directe de la valeur (0/1) n'a pas beaucoup de sens.
BoltClock
1
@BoltClock 0/1 n'a pas de sens dans la sortie du journal? Je pensais que nous étions tous des programmeurs ici lol
Cbas
298

%d, 0 est FAUX, 1 est VRAI.

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

ou

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

Sur la base des %@changements de type de données comme suit

For Strings you use %@
For int  you use %i
For float and double you use %f
SashaQbl
la source
16

Les booléens ne sont que des entiers, ce ne sont que des valeurs transtypées comme ...

typedef signed char     BOOL; 

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

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

Si la sortie est 1, OUI sinon NON

Chandan Shetty SP
la source
1
Non, bool l'est signed char. Votre expression pourrait potentiellement mal évaluer si une valeur autre que 0 ou 1 est fournie.
CodaFi
Non, le type de BOOL dépend de votre compilateur (32 vs 64 bits) et n'est souvent pas du même type que bool. bool, d'autre part, est bool, qui est un type standard, et différent du caractère signé.
gnasher729
14

Notez que dans Swift, vous pouvez simplement faire

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

Cela enregistrera testBool = true

ArcticMatt
la source
Dans Swift, vous pouvez simplement utiliser print().
Dmitry
10

Bien que ce ne soit pas une réponse directe à la question de Devang, je pense que la macro ci-dessous peut être très utile pour les personnes qui cherchent à enregistrer des BOOLs. Cela déconnectera la valeur du bool et l'étiquetera automatiquement avec le nom de la variable.

#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
la source
Une macro utile, surtout avec l'astuce pour afficher le nom de la variable. Personnellement, je n'utiliserais pas BOOL comme nom de paramètre pour éviter toute confusion.
jk7
8

FixIt d'Apple a fourni% hhd, ce qui m'a donné correctement la valeur de mon BOOL.

green_knight
la source
4

Nous pouvons vérifier de quatre façons

La première façon est

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

La deuxième façon est

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

La troisième façon est

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

La quatrième façon est

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

Dans Swift, vous pouvez simplement imprimer une valeur booléenne et elle sera affichée comme trueou false.

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

Voici comment vous pouvez le faire:

BOOL flag = NO;
NSLog(flag ? @"YES" : @"NO");
SAQIB SOHAIL BHATTI
la source
Il s'agit essentiellement d'une répétition d'une partie de la réponse de @BoltClock d'il y a quatre ans.
jk7
0
//assuming b is BOOL. ternary operator helps us in any language.
NSLog(@"result is :%@",((b==YES)?@"YES":@"NO"));
Kursat Turkay
la source
(b == OUI) est le même que juste b. comme indiqué, vous comptez sur l'optimiseur du compilateur pour le réduire à (b? @ "YES": @ "NO")
Armand