

現在、二次配列に入った式を `for-in` 構文で一次配列にして処理したいと思っているのですが、処理しようとすると、

> Closure containing control flow statement cannot be used with function
> builder 'ViewBuilder'

といったErrorが `for-in` 構文で発生してしまい、うまく処理できません。どのように対応すれば良いでしょうか。

**コード（サンプル）**

[code]

    import SwiftUI
    
    struct Author: Identifiable {
      var id: Int
      var name: String
    }
    
    struct sample: View {
        var something : [[Author]] = [[Author(id: 1, name: "Hanako"), Author(id: 2, name: "Hiroshi")],[Author(id:3, name: "Takashi")]]
    
        var body: some View {
            VStack{
                for one in something {  ←ここでError発生
                    for one in some {　　　　　
                        Text("\(one.name)")
                    }
    　　　　　　　　　　Divider()
                }
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2020-04-29T04:45:55.423
66094
2020-04-29T05:22:41.530
2020-04-29T05:11:11.857
32986
39869
question
swift swiftui
二次配列をfor-in構文を使用して一次配列にし、処理したい


`VStack`などに渡されるクロージャ引数は`@ViewBuilder`と呼ばれる特殊なもので、その中には通常のfor文を書くことはできません。

単純な繰り返しを表現する場合には、`ForEach`構造体を使います。

例えばこんなふうに書けるでしょう。

[code]

    struct Sample: View {
        var something : [[Author]] = [[Author(id: 1, name: "Hanako"), Author(id: 2, name: "Hiroshi")],[Author(id:3, name: "Takashi")]]
    
        var body: some View {
            VStack {
                ForEach(something.indices) {index in
                    ForEach(self.something[index]) {one in
                        Text("\(one.name)")
                    }
                    Divider()
                }
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2020-04-29T05:22:41.530
66096
2020-04-29T05:22:41.530
13972
66094
answer