Bagaimana cara mencetak bendera Boolean di NSLog?


Jawaban:


503

Begini cara saya melakukannya:

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

?: adalah operator kondisional ternary dalam bentuk:

condition ? result_if_true : result_if_false

Ganti string log aktual sesuai yang sesuai.


55
Mudah untuk membuat ini makro, juga:#define StringFromBOOL(b) ((b) ? @"YES" : @"NO")
jscs

3
Bagaimana ini memiliki begitu banyak suara? Ini BUKAN cara mencatat nilai boolean, ini adalah cara mencatat nilai yang berbeda tergantung pada nilai boolean.
Acey

7
@Acey: Rupanya, orang-orang (termasuk penanya asli) lebih tertarik pada yang terakhir. Jika saya harus menebak, itu karena mencetak nilainya secara langsung (0/1) tidak terlalu berarti.
BoltClock

1
@BoltClock 0/1 tidak berarti dalam output log? Saya pikir kita semua programmer di sini lol
Cbas

298

%d, 0 adalah SALAH, 1 adalah BENAR.

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

atau

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

Atas dasar %@perubahan tipe data sebagai berikut

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

16

Boolean hanyalah bilangan bulat saja, mereka hanya mengetikkan nilai yang dicor seperti ...

typedef signed char     BOOL; 

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

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

Jika output 1, YA kalau tidak, TIDAK


1
Tidak, bool adalah signed char. Ekspresi Anda berpotensi mengevaluasi secara tidak benar jika nilai selain 0 atau 1 diberikan.
CodaFi

Tidak, tipe BOOL tergantung pada kompiler Anda (32 vs 64 bit), dan seringkali tidak sama dengan bool. bool, di sisi lain, adalah bool, yang merupakan tipe standar, dan tidak sama dengan char yang ditandatangani.
gnasher729

14

Perhatikan bahwa di Swift, Anda bisa melakukannya

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

Ini akan masuk testBool = true


Di Swift Anda bisa menggunakan print().
Dmitry

10

Meskipun ini bukan jawaban langsung untuk pertanyaan Devang, saya percaya bahwa makro di bawah ini bisa sangat membantu bagi orang yang ingin masuk ke BOOL. Ini akan mengeluarkan nilai bool dan juga secara otomatis memberi label dengan nama variabel.

#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

Makro yang bermanfaat, terutama dengan trik menampilkan nama variabel. Secara pribadi saya tidak akan menggunakan BOOL sebagai nama parameter untuk menghindari kebingungan.
jk7

8

FixIt dari Apple memasok% hhd, yang memberi saya nilai BOOL dengan benar.


4

Kami dapat memeriksa dengan empat cara

Cara pertama adalah

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

Cara kedua adalah

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

Cara ketiga adalah

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

Cara keempat adalah

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

Di Swift, Anda cukup mencetak nilai boolean dan itu akan ditampilkan sebagai trueatau false.

let flag = true
print(flag) //true

1

Inilah cara Anda dapat melakukannya:

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

Ini pada dasarnya adalah pengulangan dari sebagian jawaban @BoltClock dari empat tahun lalu.
jk7

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

(b == YA) sama dengan hanya b. seperti yang tercantum, Anda bergantung pada pengoptimal kompiler untuk menguranginya kembali menjadi (b? @ "YA": @ "TIDAK")
Armand
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.