📱

SwiftUI のVStack でExtra argument in call エラー

2021/04/03に公開

VStack で一見関係のなさそうなExtra argument in call エラーが出て、ビルドが通らなくなったのでメモ。

再現手順

import SwiftUI

struct Item: View {
    var body: some View {
        Rectangle()
            .fill(Color.blue)
            .frame(width: 32, height: 32)
    }
}

struct YourView: View {
    var body: some View {
        VStack() {
            Item()
            Item()
            Item()
            Item()
            Item()
            Item()
            Item()
            Item()
            Item()
            Item()
            Item() // ここでエラー
        }
    }
}

対応方法

SwiftUI のVStack に配置できるView は最大10個という仕様になっているようです。
Group を使うことで、このエラーは解消できました。

struct YourView: View {
    var body: some View {
        VStack() {
            Group {
                Item()
                Item()
                Item()
            }
            Group {
                Item()
                Item()
                Item()
            }
            Group {
                Item()
                Item()
                Item()
            }
            Group {
                Item()
                Item()
            }
        }
    }
}

参考

この仕様はViewBuilderbuildBlock 関数の引数が最大10個というところから来ているようです。

Discussion