後nil`になるん:はなぜループ変数は `私が持っているループ
NSDictionary* server;
for (server in self.servers)
{
if (<some criterium>)
{
break;
}
}
// If the criterium was never true, I want to use the last item in the
// the array. But turns out that `server` is `nil`.
ループブロックがserver
を変更することはありません。
servers
は、辞書を持つNSMutableArray
です。このプロパティはループ中に変更されません。
server
は、ループが終了した後に値がnil
になるのはなぜですか?
ループの後でこのような変数を初めて使用しました。あまり考えずに、私はそれが(旧Cの日に)のように働くだろうと想定:
int i;
for (i = 0; i < n; i++)
{
...
}
ループは幾分か終了しなければならないので、ループのためにサーバに割り当てるためにself.serversのものがなくなると、nilは論理的な終了値になります。 –
2番目の "server"変数は別の宣言ですか?つまり、forブロックのみにスコープが設定されています(元のものは割り当てられていないことを意味します)。 –
この機能は、コレクション内の特定のオブジェクトを検索しているときにループを「中断」する場合に便利です。ループ変数の値が 'nil'で終わると、ループは目的のオブジェクトを見つけられませんでした。 – user3386109