21

私はこのようなことをしたい:

NSLog(@"You got: %x", booleanValue);

ここで、xは指定子です。しかし、私はそれを見つけることができません!避けたい:

if (booleanValue) {
    NSLog(@"You got: YES");
}
else {
    NSLog(@"You got: NO");
}

何か案は?ドキュメントにはブール指定子がありませんでした。 %@どちらも機能しませんでした。

4

7 に答える 7

37

動作するものは次の2つです。

NSLog(@"You got: %@",booleanValue ? @"YES" : @"NO");

またはキャストできます:

NSLog(@"You got: %d", (int)booleanValue);

0または1を出力します

于 2011-07-19T18:23:23.500 に答える
9

あなたはそれをintにキャストして使用することができます%d

NSLog(@"You got: %d", (int)booleanValue);

または、次のようなものを使用します。

NSLog(@"You got: %@", booleanValue ? @"YES" : @"NO");
于 2011-07-19T18:21:57.853 に答える
4

私が知っているフォーマット指定子はありません。あなたはこれを行うことができます:

NSLog(@"You got: %@", (booleanValue ? @"YES" : @"NO"));

または、BOOLを受け取り、適切な文字列を返す上記のロジックを使用して、小さな関数またはマクロを作成することもできます。その後、ログステートメントでその関数を使用できます。

于 2011-07-19T18:22:45.243 に答える
4

os_log使用する

os_log("results in true/false: %{bool}d", myBool)
os_log("results in YES/NO: %{BOOL}d", myBool)

最新のOSを使用している場合は、文字列補間を使用することもできます。詳細については、メッセージ文字列のカスタム値のフォーマットを参照してください。

@MottiShneorが指摘したように、os_log(3)manページにはより詳細なリストがあります。

Value type      Custom specifier         Example output
-----------------------------------------------------------------------------
BOOL            %{BOOL}d                 YES
bool            %{bool}d                 true
darwin.errno    %{darwin.errno}d         [32: Broken pipe]
darwin.mode     %{darwin.mode}d          drwxr-xr-x
darwin.signal   %{darwin.signal}d        [sigsegv: Segmentation Fault]
time_t          %{time_t}d               2016-01-12 19:41:37
timeval         %{timeval}.*P            2016-01-12 19:41:37.774236
timespec        %{timespec}.*P           2016-01-12 19:41:37.2382382823
bitrate         %{bitrate}d              123 kbps
iec-bitrate     %{iec-bitrate}d          118 Kibps
uuid_t          %{uuid_t}.16P            10742E39-0657-41F8-AB99-878C5EC2DCAA
sockaddr        %{network:sockaddr}.*P   fe80::f:86ff:fee9:5c16
in_addr         %{network:in_addr}d      127.0.0.1
in6_addr        %{network:in6_addr}.16P  fe80::f:86ff:fee9:5c16
于 2021-01-14T10:01:44.647 に答える
1

Swift、を使用しますString(describing: booleanValue)

例えば:os_log("You got %@", log: .default, type: .debug, String(describing: booleanValue))

于 2020-01-09T20:56:24.503 に答える
0

はい

コードは次のとおりです。

NSLog(@"%hhd",BOOLvariable);

はいの場合は1、いいえの場合は0を出力します。

于 2014-01-31T08:25:34.583 に答える
0

もちろん、直接ブールフォーマット指定子%xを使用できます

BOOL flag = YES;
NSLog(@"You got: %x", flag);

ただし、少なくとも、NSNumberオブジェクトは常に信頼できます。このオブジェクトは、「ボックス化されたデータのタイプ」を覚えているため、このNSLogも正常に機能します。

NSLog(@"You got %@", flag? @YES : @NO);

文字列ではなく、NSNumberリテラルの使用に注意してください。

于 2021-04-06T08:21:10.660 に答える