使用for迴圈遍歷字串時迴圈變數型別的坑
阿新 • • 發佈:2018-11-17
通常情況下,使用for迴圈可以通過遞增,也可以通過遞減,使用遞減遍歷程式碼如下:
- (void)testFor
{
NSString *string = @"信不信由你";
for (int i = string.length - 1; i >= 0; i--) {
NSLog(@"%c -- %d", [string characterAtIndex:i], i);
}
}
執行正常,但是xcode
會很蛋疼的報出警告因為迴圈變數型別問題。
這時,可以使用強制型別轉換,修改程式碼如下:
- (void)testFor { NSString *string = @"信不信由你"; for (int i = (int)string.length - 1; i >= 0; i--) { NSLog(@"%c -- %d", [string characterAtIndex:i], i); } }
執行正常,不會出現問題,也不再有警告。
當然也可以改變迴圈變數的型別,改為NSUInteger
,程式碼如下:
- (void)testFor
{
NSString *string = @"信不信由你";
for (NSUInteger i = string.length - 1; i >= 0; i--) {
NSLog(@"%c -- %d", [string characterAtIndex:i], i);
}
}
現在執行就會出現問題了,因為迴圈變數是無符號型別,當i為0時,再進行 --
操作會得到正值,而且這個值很大,所以會出現一直迴圈的情況。這時稍微改下程式碼就可以解決了:
- (void)testFor
{
NSString *string = @"信不信由你";
for (NSUInteger i = string.length; i > 0; i--) {
NSLog(@"%c -- %d", [string characterAtIndex:i - 1], i - 1);
}
}
這樣也可以正常運行了。