Rhythm & Biology

Engineering, Science, et al.

Fast Enumeratorの最後の"nil"

CocoaでFast Enumeratorを使っていて、ちょっとハマったところがあったので記録。


Fast Enumeratorとは、たとえばこんな感じです。

NSArray* arr = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
id i;
for (i in arr) {
  NSLog(@"%@", i);
}

この後、変数iには何が入っているでしょう。

答えはnilです。最後の値が入っているかと思って勘違いしていました。いや、正確にはnilの前の値が入っていると勘違いしていました。
よく考えると、NSArrayのインスタンスを作る時に、最後にnilを加えていますよね。iにnilが代入されて、その評価値もnilになることでfor文が終了するわけです。だから、iにnilが入っているというのは当たり前。


こんなくだらないことでハマるとは。みなさん気をつけましょう。