@ViewBuilder: магия композиции в SwiftUI.Всем привет! Сегодня разберём
@ViewBuilder — один из ключевых механизмов SwiftUI, который делает наш код таким лаконичным и выразительным.⚠️ Что такое
@ViewBuilder?Это специальный атрибут, который превращает несколько View в одну иерархию. Благодаря ему мы пишем так:
VStack {
Text("Привет")
Button("Нажми меня") {
// Действие
}
Image(systemName: "apple.logo")
}Вместо такого кошмара:
VStack(content: {
TupleView(
Text("Привет"),
Button("Нажми меня") {
// Действие
},
Image(systemName: "swift")
)
})🤔 Как это работает?
1️⃣ Автоматическая упаковка:
@ViewBuilder преобразует список вьюх в TupleView (для 2-10 элементов) или Group (если их больше).2️⃣ Поддержка условий:
Может обрабатывать if, if let, switch:
@ViewBuilder
func header(isLoggedIn: Bool) -> some View {
if isLoggedIn {
Text("Добро пожаловать!")
} else {
Button("Войти") {
// Действие
}
}
}
3️⃣ Ограничения:
🔹 Нельзя использовать for напрямую (нужен ForEach).
🔹 Максимум 10 вьюх в одном блоке (но это ограничение обходится).
✅ Продвинутые фишки:
🔸 Комбинирование с
@resultBuilder.Можно создать свой билдер для специфичных задач:
@resultBuilder
struct GridBuilder {
static func buildBlock(_ items: AnyView...) -> [AnyView] {
items
}
}
🔸 Обход ограничения в 10 вьюх.
Для этого стоит использовать Group:
@ViewBuilder
func megaView() -> some View {
Group {
Text("1")
...
Text("11") // Работает!
}
}
💡 Вывод:
@ViewBuilder — это мощный инструмент SwiftUI, который превращает декларативный код в иерархию View, делая интерфейсы гибкими и читаемыми.➡️ Подписаться на канал
Мобильный трудоголик