Jay*_*man 17 string iphone format-specifiers ios
我想做这样的事情:
NSLog(@"You got: %x", booleanValue);
Run Code Online (Sandbox Code Playgroud)
其中x是说明符.但我找不到一个!我想避免:
if (booleanValue) {
NSLog(@"You got: YES");
}
else {
NSLog(@"You got: NO");
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?文档没有布尔说明符. %@
也没用.
Pen*_*One 33
这有两件事有效:
NSLog(@"You got: %@",booleanValue ? @"YES" : @"NO");
Run Code Online (Sandbox Code Playgroud)
或者你可以施放:
NSLog(@"You got: %d", (int)booleanValue);
Run Code Online (Sandbox Code Playgroud)
哪个会输出0或1
您可以将其强制转换为int并使用%d
:
NSLog(@"You got: %d", (int)booleanValue);
Run Code Online (Sandbox Code Playgroud)
或者使用这样的东西:
NSLog(@"You got: %@", booleanValue ? @"YES" : @"NO");
Run Code Online (Sandbox Code Playgroud)
据我所知,没有格式说明符。你可以这样做:
NSLog(@"You got: %@", (booleanValue ? @"YES" : @"NO"));
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用上面的逻辑编写一个小函数或宏,它接受一个 BOOL 并返回适当的字符串。然后您可以在日志语句中使用该函数。
小智 5
用来os_log
os_log("results in true/false: %{bool}d", myBool)
os_log("results in YES/NO: %{BOOL}d", myBool)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是最新的操作系统,您还可以使用字符串插值。有关详细信息,请参阅设置消息字符串中的自定义值格式
正如 @MottiShneor 指出的,手册页中有更详细的列表os_log(3)
:
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
Run Code Online (Sandbox Code Playgroud)