Из-за способа реализации SwiftUI представление может иметь не более 10 прямых, явных подпредставлений.У вашего верхнего уровня VStack
есть 21 прямое подпредставление: 10 дочерних VStack
с и 11 Spacer
с вокруг них.
Существуют различные обходные пути.Если вам действительно нужен жестко запрограммированный список подпредставлений, вы можете использовать Group
, чтобы сделать некоторых детей непрямыми:
struct ContentView: View {
var body: some View {
VStack {
Group {
Spacer()
VStack {
Text("Title 1")
Text("Text 1")
}
Spacer()
VStack {
Text("Title 2")
Text("Text 2")
}
Spacer()
VStack {
Text("Title 3")
Text("Text 3")
}
}
Group {
Spacer()
VStack {
Text("Title 4")
Text("Text 4")
}
Spacer()
VStack {
Text("Title 5")
Text("Text 5")
}
Spacer()
VStack {
Text("Title 6")
Text("Text 6")
}
}
Group {
Spacer()
VStack {
Text("Title 7")
Text("Text 7")
}
Spacer()
VStack {
Text("Title 8")
Text("Text 8")
}
Spacer()
VStack {
Text("Title 9")
Text("Text 9")
}
}
Spacer()
VStack {
Text("Title 10")
Text("Text 10")
}
Spacer()
}
.background(Color.red)
}
}
Здесь у верхнего уровня VStack
есть 6 прямых детей: 3 Group
, 2 Spacer
и 1 VStack
.Каждый Group
также имеет 6 прямых детей: 3 VStack
и 3 Spacer
.Ни у одного представления не может быть более 10 прямых детей.
Лучший подход здесь - использовать ForEach
для генерации детей:
struct ContentView: View {
var body: some View {
VStack {
Spacer()
ForEach(1 ... 10, id: \.self) { i in
Group {
VStack {
Text("Title \(i)")
Text("Text \(i)")
}
Spacer()
}
}
}
.background(Color.red)
}
}
Теперь на верхнем уровне VStack
есть только дваПрямые подпредставления: первые Spacer
и ForEach
.ForEach
повторяет свое подпредставление (Group
) столько раз, сколько необходимо.
Мы используем Group
в этом случае, чтобы позволить Swift выводить тип тела ForEach
, так какВ противном случае тело ForEach
будет содержать два оператора (VStack
и Spacer
), которые не позволят Swift определить его тип.