Làm cách nào để in cờ Boolean trong NSLog?


Câu trả lời:


503

Đây là cách tôi làm điều đó:

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

?: là toán tử điều kiện ternary có dạng:

condition ? result_if_true : result_if_false

Thay thế chuỗi nhật ký thực tế cho phù hợp khi thích hợp.


55
Cũng dễ dàng biến điều này thành một macro:#define StringFromBOOL(b) ((b) ? @"YES" : @"NO")
jscs

3
Làm thế nào điều này có rất nhiều phiếu bầu? Đây KHÔNG phải là cách ghi nhật ký giá trị boolean, đây là cách ghi nhật ký các giá trị khác nhau tùy thuộc vào giá trị boolean.
Acey

7
@Acey: Rõ ràng, mọi người (bao gồm cả người hỏi ban đầu) đã quan tâm nhiều hơn đến cái sau. Nếu tôi định mạo hiểm đoán thì đó là vì việc in trực tiếp giá trị (0/1) không có ý nghĩa lắm.
BoltClock

1
@BoltClock 0/1 không có ý nghĩa trong đầu ra nhật ký? Tôi nghĩ rằng tất cả chúng ta đều là lập trình viên ở đây lol
Cbas

298

%d, 0 là SAI, 1 là THẬT.

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

hoặc là

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

Trên cơ sở %@thay đổi kiểu dữ liệu như sau

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

16

Booleans không là gì ngoài số nguyên, chúng chỉ là các giá trị được đúc như ...

typedef signed char     BOOL; 

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

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

Nếu đầu ra là 1, CÓ thì KHÔNG


1
Không, bool là signed char. Biểu thức của bạn có khả năng có thể đánh giá không chính xác nếu giá trị khác 0 hoặc 1 được cung cấp.
CodaFi

Không, loại BOOL phụ thuộc vào trình biên dịch của bạn (32 so với 64 bit) và thường không cùng loại với bool. bool, mặt khác, là bool, là một loại tiêu chuẩn, và không giống như char đã ký.
gnasher729

14

Lưu ý rằng trong Swift, bạn chỉ có thể làm

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

Điều này sẽ đăng nhập testBool = true


Trong Swift bạn chỉ có thể sử dụng print().
Dmitry

10

Mặc dù đây không phải là câu trả lời trực tiếp cho câu hỏi của Devang, tôi tin rằng macro dưới đây có thể rất hữu ích cho những người muốn đăng nhập BOOLs. Điều này sẽ đăng xuất giá trị của bool cũng như tự động gắn nhãn với tên của biến.

#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

Một macro hữu ích, đặc biệt là với thủ thuật hiển thị tên biến. Cá nhân tôi sẽ không sử dụng BOOL làm tên tham số để tránh nhầm lẫn.
jk7


4

Chúng tôi có thể kiểm tra bằng bốn cách

Cách đầu tiên là

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

Cách thứ hai là

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

Cách thứ ba là

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

Cách thứ tư là

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

Trong Swift, bạn chỉ cần in một giá trị boolean và nó sẽ được hiển thị dưới dạng truehoặc false.

let flag = true
print(flag) //true

1

Đây là cách bạn có thể làm điều đó:

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

Đây về cơ bản là sự lặp lại một phần câu trả lời của @BoltClock từ bốn năm trước.
jk7

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

(b == CÓ) giống như chỉ b. như được liệt kê, bạn đang dựa vào trình tối ưu hóa của trình biên dịch để giảm nó xuống (b? @ "CÓ": @ "KHÔNG")
Armand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.