NSLog에서 부울 플래그를 인쇄하는 방법?


답변:


503

내가하는 방법은 다음과 같습니다.

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

?: 다음 형식의 삼항 조건 연산자입니다.

condition ? result_if_true : result_if_false

적절한 경우 실제 로그 문자열을 적절하게 대체하십시오.


55
이것을 매크로로 만들기도 쉽다 :#define StringFromBOOL(b) ((b) ? @"YES" : @"NO")
jscs

3
투표권은 어떻게 되나요? 이것은 부울 값을 기록하는 방법이 아니라 부울 값에 따라 다른 값을 기록하는 방법입니다.
Acey

7
@Acey : 사람들 (원래의 아커 포함)은 후자에 더 관심이있었습니다. 내가 추측 할 위험이 있다면, 값을 직접 (0/1) 인쇄하는 것이별로 의미가 없기 때문입니다.
BoltClock

1
@BoltClock 0/1은 로그 출력에서 ​​의미가 없습니까? 나는 우리 모두가 여기 프로그래머라고 생각했다 lol
Cbas

298

%d, 0 은 FALSE, 1 은 TRUE입니다.

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

또는

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

데이터 유형에 %@따라 다음과 같이 변경됩니다.

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

16

부울은 정수에 지나지 않으며 단지 유형 캐스트 ​​값입니다.

typedef signed char     BOOL; 

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

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

출력이 1이면 YES, NO


1
아니요, bool은 signed char입니다. 0 또는 1 이외의 값을 제공하면식이 잘못 평가 될 수 있습니다.
CodaFi

아니요, BOOL 유형은 컴파일러 (32 비트와 64 비트)에 따라 다르며 종종 bool과 같은 유형이 아닙니다. 반면에 bool은 표준 유형이며 부호있는 문자와 동일하지 않은 bool입니다.
gnasher729

14

Swift에서는 할 수 있습니다.

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

이것은 기록합니다 testBool = true


Swift에서는을 사용할 수 있습니다 print().
Dmitry

10

이것은 Devang의 질문에 대한 직접적인 대답은 아니지만 아래 매크로는 BOOL을 기록하려는 사람들에게 매우 도움이 될 수 있다고 생각합니다. 이렇게하면 부울 값이 로그 아웃되고 변수 이름으로 자동으로 레이블이 지정됩니다.

#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

특히 변수 이름을 표시하는 유용한 매크로입니다. 개인적으로 혼란을 피하기 위해 BOOL을 매개 변수 이름으로 사용하지 않습니다.
jk7

8

Apple의 FixIt은 % hhd를 제공하여 BOOL의 가치를 올바르게 제공했습니다.


4

4 가지 방법으로 확인할 수있다

첫 번째 방법은

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

두 번째 방법은

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

세 번째 방법은

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

네 번째 방법은

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

Swift에서는 단순히 부울 값을 인쇄하면 true또는 로 표시됩니다 false.

let flag = true
print(flag) //true

1

방법은 다음과 같습니다.

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

이것은 기본적으로 4 년 전의 @BoltClock의 답변 중 일부입니다.
jk7

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

(b == YES)는 b와 동일합니다. 나열된 것처럼 컴파일러 최적화 프로그램을 사용하여 다시 (b? @ "YES": @ "NO")로 줄입니다.
Armand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.