構造体をForEachする

MaxTemp構造体の各要素をForEachで一つずつ取り出して処理するには、まず構造体のプロパティを配列に変換する必要があります。SwiftUIのForEachは、通常、配列やRangeのようなRandomAccessCollectionに準拠したコレクションを処理するために設計されているためです。

以下に、MaxTempのインスタンスを初期化し、そのプロパティを配列に変換してForEachで表示する完全なサンプルコードを示します。

解説

  1. 配列への変換 (extension MaxTemp)
    • MaxTemp構造体に**toArray**という算出プロパティを追加しています。
    • これは、構造体のfirstからseventhまでのプロパティの値を順序通りにStringの配列として返します。
  • ForEachで処理するためには、この配列が必須です。

オプショナルな変数 (@State var maxtemp: MaxTemp?)

  • 元の質問の通り、maxtempをオプショナル (MaxTemp?) として宣言しています。@Stateはビュー内で値を変更可能にするために使用しています。
  • 実際のアプリでは、この変数がAPIなどからデータが取得されるまではnilになり得ます。

オプショナルのアンラップとForEach

  • body内で、まずif letを使ってmaxtempアンラップし、さらにtoArrayで配列に変換しています。

ForEachは、配列temperaturesインデックス (.indices) を使ってループ処理を行っています。インデックスをIDとして使うため、id: \.selfを指定しています。

indexを使って、インデックス (temperatures[index]) の両方にアクセスし、表示処理を行っています。

コメント

タイトルとURLをコピーしました