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"]