目标C:-1< 0返回false

时间:2015-06-04 08:00:22

标签: objective-c conditional-statements

这2之间有什么区别吗?

int count = 0;
for (UIView *view in scrollView.subviews) {
    NSLog(@"%d < %d", [json[@"images"] count] - 1, count);
    // Output: -1 < 0
    if ([json[@"images"] count] - 1 < count) break;
}

int count = 0, maxIndex = [json[@"images"] count] - 1;
for (UIView *view in scrollView.subviews) {
    NSLog(@"%d < %d", maxIndex, count);
    // Output: -1 < 0
    if (maxIndex < count) break;
}

我刚刚面对的是,第一个解决方案没有break循环,而第二个解决方案确实如此。

背后有什么理由吗?

1 个答案:

答案 0 :(得分:3)

那是因为countNSUInteger属性。因此,在您的案例中永远不会-1。在您的第二种情况下,您将maxIndex分配给int,然后-1会为您提供int count = 0; NSUInteger maxIndex = [json[@"images"] count] - 1; for (UIView *view in scrollView.subviews) { NSLog(@"%d < %d", maxIndex, count); // Output: -1 < 0 if (maxIndex < count) break; //This will not break either as maxIndex will never be `-1`

所以试着清楚地了解发生了什么。

NSLog

}

此外,在%d您使用的int %lu or %lx类型typeId的格式说明符中,请尝试extendedTypeStr

希望这有帮助