

コードは以下の通りです。

[code]

    import SwiftUI
       let layout2: [GridItem] = Array(repeating: .init(.flexible(minimum: 40, maximum: 75)), count: 5)
    struct ContentView: View {
        @State var scores: [Int] = [1,3,4,3,2,  2,3,3,4,3]
        var body: some View {
       //             Text("\(scores.count)")  = 10
      //      ScrollView {
      
                HStack {
                    LazyVGrid(columns: layout2, spacing: 1) {
                        ForEach(scores, id: \.self) { num in
                            ZStack {
                                Rectangle()
                                    .foregroundColor(.accentColor)
                                    .frame(height: 45)
                                Text("\(num)")
                                    .foregroundColor(.white)
                            } // ZStack
                            
                        } // ForeEach
                    } // LazyVGrid
                }  // HStack
    //        }  // ScrollView
        }  // body
    }  // ContentView
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/FHJar.png)](https://i.stack.imgur.com/FHJar.png)


CC BY-SA 4.0
2023-04-05T23:55:32.040
94428
2023-04-06T05:21:57.647
2023-04-06T00:41:03.027
3060
57706
question
swift
iPhoneアプリをswiftで作成しています。LazyVGridで作成したのですが思う結果がでません。何か間違っているのかわかりません。


ログにエラーの内容が出ているはずです。

[code]

    LazyVGridLayout: the ID 3 is used by multiple child views, this will give undefined results!
    LazyVGridLayout: the ID 2 is used by multiple child views, this will give undefined results!
    LazyVGridLayout: the ID 4 is used by multiple child views, this will give undefined results!
    
[/code]

ForEachでは同じidのものを渡してはいけません。  
ここではscoresのForEachでselfを渡しているため、被りがあります。それが原因です。

以下とかであれば綺麗に表示されると思います。

[code]

    ForEach(1..<30, id: \.self) { num in
    
[/code]

以下のようにScoreを設定して、scores: [Score]とすればうまくいくはずです。

[code]

    struct Score {
      let id = UUID()
      let score: Int
    }
    
[/code]


CC BY-SA 4.0
2023-04-06T05:21:57.647
94431
2023-04-06T05:21:57.647
40856
94428
answer