for (i, message) in messages.enumerated() {
// 全部にしたい処理
if (i == messages.endIndex - 1) {
// 最後だけしたい処理
}
}
まずenumerated()
を使うことでi(ここでindexでなく敢えてiを使ったのはenumerated()
で取得できるのはただのカウントだから)を取得できるが、逆にendIndexは配列しか持っていない。
Swift3.0からfor文が使えなくなりfor-in
文かforEach
、もしくはmap
などしか使えなくなった。なので上記のenumurated()を使った「何回目の処理か」を取得する方法が散見されるが、これはindexでないというのが正しい説明のよう。
https://qiita.com/motokiee/items/4886b603631a7c076f46
https://qiita.com/a-beco/items/0fcfa69cca20a0ba601c
messages.count
でも同じ値が帰ってくるはずだが、あれ、-1であってるんだっけ…。
guard
を使わなかったのは、処理を抜ける時にbreak
とreturn
の違いもあってこんがらがりそうだったから。break
は今の繰り返し処理を抜けて次の繰り返しを始めるが、return
を使っちゃうとfor-in
の処理がそこですべて終了しちゃう。