Bagaimana cara mencetak bendera Boolean di NSLog?

311

Apakah ada cara untuk mencetak nilai bendera Boolean di NSLog?

Devang
sumber

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.

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

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

arcticmatt
sumber
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
xor
sumber
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.

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

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

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

Inilah cara Anda dapat melakukannya:

BOOL flag = NO;
NSLog(flag ? @"YES" : @"NO");
SAQIB SOHAIL BHATTI
sumber
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"));
Kursat Turkay
sumber
(b == YA) sama dengan hanya b. seperti yang tercantum, Anda bergantung pada pengoptimal kompiler untuk menguranginya kembali menjadi (b? @ "YA": @ "TIDAK")
Armand