【SwiftUI】ForEachの使い方(1/2)

ForEachは繰り返し処理の中で、Viewを生成する仕組みです。
名前の配列をループしてそれぞれをTextView化する、あるいはメニュー項目に追加するなどの動きを実現します。
加えて、ForEachを使うとViewを手動で追加した場合に発生する10個までの制限も受けません。

ForEachの繰り返しの対象については、次の2通りの指定方法があります。

  1. 繰り返す範囲を数値(Int)で指定する方法【範囲指定】
  2. 各要素の一意性を保証したデータコレクションとして渡す方法【id指定】

本記事(1/2)では、1番目の方法について解説します。

2番目の方法については、こちらの記事を参照して下さい。

【SwiftUI】ForEachの使い方(2/2)
ForEachの繰り返し処理にて出力したデータを変更(削除、並び替え)できるようにするには、SwiftUIが該当データを識別する為に、各要素の一意性が保証されている必要があります。本記事(2/2)では、各要素の一意性を保証したデータコレク...

スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。

【Xcode】11.2.1
【Swift】5.1
【iOS】13.2.2
【macOS】Catalina バージョン 10.15.2
スポンサーリンク

基本的な使い方

ForEachは複数のViewを生成しますので、FormやList、VStackなどのコンテナ内に記述するのが前提となります。また、Pickerの選択肢設定などにも使えます。

引数にはSwiftの範囲型(Range)で繰り返す範囲を指定します。上記の”1..<6”は1以上6未満(つまり1〜5)の範囲を指定しています。
ForEachは、繰り返すすべてのアイテム(この例では数値)に対して、{}で示すクロージャーを1回実行し、引数として現在のループアイテムを渡します。
引数名の指定は"引数名 in"と記述します。
1から5までループする場合は、1,2,3・・のように渡されます。

【図1:基本的な使い方】

ForEachのイニシャライザの定義で指定されている引数の型がRange<Int>の為、同じ範囲指定でも、ClosedRange(”1...5”のような記述)はこの場合使えないので注意して下さい。コンパイルエラーになります。

スポンサーリンク

配列(コレクション)での繰り返し処理

範囲型(Range)で繰り返す範囲を指定する方法を応用して、配列(コレクション)を使った繰り返し処理ができます。

【図2:配列(コレクション)での繰り返し処理】

但しこの方式が使えるのは、データの変更(削除・並び替え)が発生しない出力専用として使う場合のみです。(Pickerのリスト指定など)
データの変更が発生する場合は、各要素の一意性を保証する必要がある為、次の記事(2/2)で解説する、id指定方式で出力します。

【SwiftUI】ForEachの使い方(2/2)
ForEachの繰り返し処理にて出力したデータを変更(削除、並び替え)できるようにするには、SwiftUIが該当データを識別する為に、各要素の一意性が保証されている必要があります。本記事(2/2)では、各要素の一意性を保証したデータコレク...
スポンサーリンク

あわせて読みたい記事

【SwiftUI】Listの使い方
(2022/03/09 更新)Listはデータの一覧表示をするのに適したViewです。画面に収まらない量の場合はスクロール表示になるなど、UIKitのUITableViewに似ていますが、はるかに簡単に使えます。ListはForEa...
【SwiftUI】Formの使い方
(2021/09/26 更新)Formは設定画面などのデータ入力に使用するコントロールをグループ化するコンテナとして使用します。
【SwiftUI】Pickerの使い方
Pickerは複数の選択肢の中から1つの値をユーザーに選択させる為の部品です。図のような回転ホイール表示が代表的なスタイルですが、プラットフォームによってスタイルが自動的に変わる特徴があります。