if 语句中的意外结果
Unexpected result in an if statement
这个真让我摸不着头脑。
我有一本字典,用于跟踪错误和警告的计数。
嗯,在 if (...)
块中,如图所示,我正在测试 0 个错误,出于某种原因,我尝试过的每个代码组合都表示 errors count > 0是真的。
这是 LLDB 控制台的一些结果...
(lldb) po violationCounts[@"errors"]
0
(lldb) po [violationCounts[@"errors"] class]
__NSCFNumber
(lldb) p violationCounts[@"errors"] > 0 (bool)
= true
(lldb) p ((int)violationCounts[@"errors"]) > 0 (bool)
= true
为什么对 violationsCounts 的评估 > 0
因为保存为NSNumber
,所以应该是:
po [violationCounts[@"errors"] integerValue] > 0
violationCounts[@"errors"]
的值是一个 NSNunber
因此必须将其转换为整数,而不是强制转换:
if ([violationCounts[@"errors"] integerValue] > 0)
NSDictionaries
中的所有值都是对象。
要在调试器中打印它,不需要转换它,因为将调用描述方法并将其转换为显示。但是需要使用"po"(打印对象)而不是"p"(打印):
po violationCounts[@"errors"]
这个真让我摸不着头脑。
我有一本字典,用于跟踪错误和警告的计数。
嗯,在 if (...)
块中,如图所示,我正在测试 0 个错误,出于某种原因,我尝试过的每个代码组合都表示 errors count > 0是真的。
这是 LLDB 控制台的一些结果...
(lldb) po violationCounts[@"errors"]
0
(lldb) po [violationCounts[@"errors"] class]
__NSCFNumber
(lldb) p violationCounts[@"errors"] > 0 (bool)
= true
(lldb) p ((int)violationCounts[@"errors"]) > 0 (bool)
= true
为什么对 violationsCounts 的评估 > 0
因为保存为NSNumber
,所以应该是:
po [violationCounts[@"errors"] integerValue] > 0
violationCounts[@"errors"]
的值是一个 NSNunber
因此必须将其转换为整数,而不是强制转换:
if ([violationCounts[@"errors"] integerValue] > 0)
NSDictionaries
中的所有值都是对象。
要在调试器中打印它,不需要转换它,因为将调用描述方法并将其转换为显示。但是需要使用"po"(打印对象)而不是"p"(打印):
po violationCounts[@"errors"]