ブール値のObjective-Cフォーマット文字列?


回答:


173

これを行う1つの方法は、文字列に変換することです(2つの可能性しかないため、難しくありません)。

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

ブール値のフォーマット指定子はないと思います。


2
出力文字列はすべきではありません:「はい」と「いいえ」:P
ベン・S

131
または「ケーキ」と「ケーキなし」。何にでも似合う。
マイケルマイヤーズ

2
私はケーキが大好きで、ケーキはありません!私はすべてのxを交換するつもりです@「YES」:@「NO」のコードをX @「ケーキ」と:@「いいえケーキ」のすぐ:?D -まあ、とにかく私のオブジェクトの説明については、少なくとも;)
ジェイソンココ

8
または、TheCakeIsALieおよびTheCakeIsNotALie。
ウォーレンP

3
%hhdは、ブール値を整数フラグとして0または1として表示する適切な方法です。0はfalse、1はtrueです。
Onder OZCAN、2015年

69

私がお勧めします

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

なぜなら、ええと、BOOLsが呼ばれているYESNOのObjective-Cインチ


2
これは、マクロまたは関数の明らかなユーティリティスポットのようです(アプリ全体で文字列リテラルの伝達を回避する場合のみ)。
ウォーレンP

そのような文字列の "伝播"を回避する必要があるのは、あなただけです。ObjCは、不変文字列(および他のオブジェクト)の同じ値のインスタンスを合体させ、1つのコピーだけがメモリに常駐するようにします。マクロも機能もOK、そしてコピーアンドペーストもOKです。
Motti Shneor


23

Objective-Cでは、BOOL型は単なる署名付き文字です。から<objc/objc.h>

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

あなたが使用して印刷することができますので、%dフォーマッタをしかし、それだけで印刷します10、しませYESNO

または、他の回答で提案されているように、文字列を使用することもできます。


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.