Comment imprimer le drapeau booléen dans NSLog?


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.


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

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


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


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

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.


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);

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

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

1

Voici comment vous pouvez le faire:

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

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"));

(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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.