부울에 대한 Objective-C 형식화 문자열?


답변:


173

이를 수행하는 한 가지 방법은 문자열로 변환하는 것입니다 (두 가지 가능성 만 있기 때문에 어렵지 않습니다).

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

부울 값에 대한 형식 지정자가 있다고 생각하지 않습니다.


2
출력 문자열은 "Yes"및 "No"가 아니어야합니다. : P
Ben S

131
또는 "케이크"및 "케이크 없음". 당신에게 맞는 것이 무엇이든.
Michael Myers

2
나는 케이크를 좋아하고 케이크는 없다! 내 모든 x? @ "YES": @ "NO"코드를 x? @ "Cake": @ "No Cake"로 즉시 교체하겠습니다. : D-음, 어쨌든 내 개체 설명에 대해서는;)
Jason 코코

8
또는 TheCakeIsALie 및 TheCakeIsNotALie.
Warren P

3
% hhd는 부울 값을 정수 플래그로 0 또는 1로 표시하는 적절한 방법입니다. 0은 거짓 1은 참입니다.
Onder OZCAN

69

나는 추천 할 것이다

NSLog(@"%@", boolValue ? @"YES" : @"NO");

음, BOOLs가 YES또는 NOObjective-C에서 호출 되기 때문 입니다.


2
매크로 또는 함수에 대한 명백한 유틸리티 지점 인 것 같습니다 (앱 전체에 문자열 리터럴 전파를 피하기위한 경우에만 해당).
Warren P

ObjC는 변경 불가능한 문자열 (및 기타 개체)의 동일한 값 인스턴스를 결합하여 하나의 복사본 만 메모리에 상주하는 것처럼 이러한 문자열의 "전파"를 실제로 피할 필요가 없습니다. 매크로는 OK, 기능은 OK, 복사 및 붙여 넣기도 OK입니다.
Motti Shneor 2019

52

또는 다음 %d중 하나를 인쇄 하는 정수 포맷터를 사용하십시오 .01

NSLog(@"%d", myBool);

23

Objective-C에서 BOOL유형은 부호있는 문자입니다. 에서 <objc/objc.h>:

typedef signed char BOOL;
#define YES         (BOOL)1
#define NO          (BOOL)0

당신이 사용하여 인쇄 할 수 %d포매터를하지만 만 인쇄됩니다 1하거나 0,하지 YES또는 NO.

또는 다른 답변에서 제안한 것처럼 문자열을 사용할 수 있습니다.


1
% c는 제어 문자 인 ASCII 문자 0 또는 1을 인쇄하지 않습니까?
JeremyP 2010

21

다음 인라인 함수를 .h파일에 추가 하십시오.

static inline NSString* NSStringFromBOOL(BOOL aBool) {
    return aBool? @"YES" : @"NO";
}

이제 갈 준비가되었습니다 ...

NSLog(@"%@", NSStringFromBOOL(BOOL_VAL));


1

아래 함수를 추가하고 BOOL값을 전달하면 메소드가NSString

- (NSString *)boolValueToString:(BOOL)theBool {
    if (theBool == 0)
        return @"NO"; // can change to No, NOOOOO, etc
    else
        return @"YES"; // can change to YEAH, Yes, YESSSSS etc
}

1

가장 쉬운 방법은 다음과 같습니다.

NSLog(@" %@", @(BOOL_VAL));

@(표현)

박스형 표현식을 동적으로 평가하고 그 값 (즉, const char *의 경우 NSString, int의 경우 NSNumber 등)에 따라 적절한 개체 리터럴을 반환합니다.


0

나는 이것으로 NSString의 카테고리를 만들었습니다.

+ (instancetype)stringWithBool:(BOOL)boolValue {
return boolValue ? @"YES" : @"NO";
}

다음과 같이 사용하십시오.

[NSString stringWithBool:boolValue];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.