Ответ
Эта возможность обеспечивается атрибутом @ViewBuilder, который неявно применяется к свойству body.
Принцип работы:
@ViewBuilder— это function builder, который преобразует последовательность выражений видаViewв единую коллекцию представлений.- Компилятор автоматически оборачивает несколько view, возвращаемых из
body, в специальный тип —TupleView.
Пример и преобразование:
// Код разработчика (чистый синтаксис):
var body: some View {
Text("Hello")
Text("World")
Image(systemName: "globe")
}
// Фактически компилятор генерирует:
var body: some View {
ViewBuilder.buildBlock(
Text("Hello"),
Text("World"),
Image(systemName: "globe")
) // Возвращает TupleView<(Text, Text, Image)>
}
Важные ограничения:
- Логика (
if,switch) внутриbodyтакже поддерживаетсяViewBuilder. - Максимальное количество view в такой неявной группе — 10 (ограничение кортежей в Swift). Для большего числа или динамических списков используйте явные контейнеры:
Group,VStack,ForEach.// Для >10 элементов или динамического списка: var body: some View { Group { // или VStack // ... более 10 представлений } }