2015-06-04 171 views
0

這2個之間有什麼區別嗎?Objective C:-1 <0 return false

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循環,而第二解決方案一樣。

背後有什麼理由嗎?

+0

也許JSON索引返回一個字符串,而不是整數? –

+0

不是'json [@「images」],而是'count'屬性,應該是整數。我把'%d'放在那裏,沒有警告,這意味着肯定是整數 –

回答

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

希望這有助於

+0

你是對的。感謝那 –

+0

關於在'%lu'和'%lx'中使用'NSLog()'的說法並不完全正確,因爲NSUInteger在32位和64位版本上更改了大小。如果你想同時支持,你將需要使用該格式說明符**和**將值轉換爲'long'。 – Droppy

+0

@完全是。 –