与えられた配列
NSArray *myArray = @[@"hello", @5, @[@6, @7, @8]];
for (NSNumber *myNumber in myArray)
{
NSLog (@"%@", myNumber);
}
ログ メッセージの出力は 5 または 5 6 7 8 になります。for/in ループは、ディクショナリ/配列の最上位オブジェクトをイントロスペクトしますか、それともネストされたセット、配列、ディクショナリなどを深く調べますか?
編集
私はこの質問に多くの熱意を持っていることに気付いたので、私が何を得ていたのかを明確にさせてください. はい、大丈夫です。 for-in 高速列挙はイントロスペクションを実行しませんが、なぜですか? NSNumber や NSString などの型を具体的に指定している場合、for in ループは、オブジェクトを間違った型としてキャストするのではなく、指定した型で kindOfClass メソッドを実行しないのはなぜですか? 上記の例では、配列内の NSNumbers のみを反復処理するのは直感的ではありませんか?
答えは、配列内の各項目に対してイントロスペクションを実行していると思われますが、高速列挙のパフォーマンス向上を無効にする可能性がありますか? しかし、動的型付けが必要な場合は id を使用し、イントロスペクションを実行したい場合は明示的な型を使用して、これを解決できないでしょうか?