1. 程式人生 > >使用for迴圈遍歷字串時迴圈變數型別的坑

使用for迴圈遍歷字串時迴圈變數型別的坑

通常情況下,使用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);
    }
}

這樣也可以正常運行了。