![見出し画像](https://assets.st-note.com/production/uploads/images/68428171/rectangle_large_type_2_b098e606fa912be606d4931d7fbca5ff.png?width=800)
SwiftUIちょっとチップス - forEach
ForEachは繰り返し処理の中で、Viewを生成する仕組みです。
ForEachは複数のViewを生成しますので、FormやList、VStackなどのコンテナ内に記述するのが前提となります。また、Pickerの選択肢設定などにも使えます。
"Form"または"List"で使うことができます。その違いはというと、"Form" は、データをグループ化してリスト表示することができ、"Listは"単純にデータを順番に並べることができます。
インデックスを利用
ForEach、Formを使って簡単に実装。基本的な使い方としては、配列のインデックスを指定して取り出すやり方。
struct ContentView: View {
var fruits = ["apple","banana","peach","grape","strawberry"]
var body: some View {
NavigationView {
Form {
ForEach(0..<fruits.count){ index in
Text(fruits[index])
}
}
}
}
}
ForEach(0..<fruits.count)
これで配列のインデックス順番に取り出します。取り出したインデックスを
Text(fruits[index])
で画面表示させます。
"Form"を"List"に変更しても同じになります。
配列から直接
次に配列から直接値を取って表示させる方法として、"id:\.self"を使った使い方。
struct ContentView: View {
var fruits = ["apple","banana","peach","grape","strawberry"]
var body: some View {
NavigationView {
Form{
ForEach(fruits,id:\.self){ name in
Text(name)
}
}
}
}
}
ForEach(fruits,id:\.self)
とすると、配列fruitsの各要素を取り出して、その要素を"name"というキーワード(自分で自由に決めることができます)で取り出してText()で表示させています。
辞書型の配列
辞書型の配列を取り出し表示させます。構造体を作ってプロトコル
Identifiableに適合させるやり方
struct FurutsId:Identifiable{
var id = UUID()
var name:String
}
辞書は構造体を使って定義します。
var fruits = [ FurutsId(name:"apple"),FurutsId(name:"banana"),FurutsId(name:"peach"),FurutsId(name:"grape"),FurutsId(name:"strawberry")]
あとは取り出したい変数を指定して ForEachでループします。
ForEach(fruits){ fl in
Text(fl.name)
}
全体です。
struct FurutsId:Identifiable{
var id = UUID()
var name:String
}
struct ContentView: View {
var fruits = [ FurutsId(name:"apple"),FurutsId(name:"banana"),FurutsId(name:"peach"),FurutsId(name:"grape"),FurutsId(name:"strawberry")]
var body: some View {
NavigationView {
Form{
ForEach(fruits){ fl in
Text(fl.name)
}
}
}
}
}
Identifiableに準拠した構造体を作ってそれに適応した要素を取り出します。
struct FurutsId:Identifiable{
var id = UUID()
var name:String
}
Identifiableに準拠させないやり方
ForEach(fruits,id:\.id)
という感じので"id"を取り出し同じことができます。
この場合は"\.idと"して" var id = UUID()"と定義したものを取り出しに使います。
この記事が気に入ったらサポートをしてみませんか?