Что такое атрибут @ViewBuilder в SwiftUI?

«Что такое атрибут @ViewBuilder в SwiftUI?» — вопрос из категории SwiftUI, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

@ViewBuilder — это атрибут-функциональный строитель (function builder) в SwiftUI, который позволяет декларативно собирать иерархию представлений из нескольких дочерних вью, используя DSL-подобный синтаксис.

Как работает: Он преобразует несколько выражений внутри замыкания в единый возвращаемый тип some View. Это основа для контейнеров, таких как VStack, HStack, и модификаторов body.

Пример использования в кастомном компоненте:

struct CardView<Content: View>: View {
    let content: Content

    init(@ViewBuilder content: () -> Content) {
        self.content = content()
    }

    var body: some View {
        VStack {
            content
        }
        .padding()
        .background(Color.gray.opacity(0.1))
    }
}

// Вызов:
CardView {
    Text("Заголовок")
    Divider()
    Text("Описание")
}

Ключевые особенности:

  • Поддерживает условную логику (if, switch) и Optional развёртывание.
  • Не поддерживает произвольные циклы (например, for). Для динамических списков используйте ForEach.
  • Имеет ограничение Swift на количество дочерних вью (обычно до 10) в одном блоке.
  • Позволяет создавать гибкие и переиспользуемые UI-компоненты.