ViewBuilder и обобщённые контейнеры
Принимайте произвольное содержимое с помощью @ViewBuilder.
«ViewBuilder и обобщённые контейнеры» — бесплатный урок SwiftUI Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SwiftUI Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SwiftUI Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Containers That Hold Anything
VStack and List accept whatever views you nest inside them. You can build your own container that holds arbitrary content too. 📦
What @ViewBuilder Does
The @ViewBuilder attribute lets a closure list several views without commas or arrays. It is the magic behind stacks.
VStack {
Text("One")
Text("Two")
}Accept content as a Closure
Make your container take a content closure marked @ViewBuilder. Callers then pass views just like they do for VStack.
struct Card<Content: View>: View {
@ViewBuilder var content: Content
}Generic over Content
The container is generic over its content type. That single struct can wrap a Text, an image, or a whole layout.
Render the Content
In your body, place the stored content inside whatever wrapper you want, like padding and a background.
var body: some View {
content.padding().background(.gray)
}Use Your Container
Call it with a trailing closure and nest any views inside. Your custom wrapper now feels just like a built-in one.
Card {
Text("Title")
Text("Body")
}Builder on Functions Too
Mark a helper function with @ViewBuilder to return different views from branches without wrapping them in a type.
@ViewBuilder
func footer(show: Bool) -> some View {
if show { Text("More") } else { EmptyView() }
}Conditionals in Builders
Inside a builder you can use if and switch freely. SwiftUI assembles the chosen branch into the final view tree.
Multiple Content Slots
A container can take more than one builder, like a header and a footer. Each slot is its own @ViewBuilder closure.
struct Panel<H: View, B: View>: View {
@ViewBuilder var header: H
@ViewBuilder var body2: B
}Reusable Layout Shells
Generic containers capture a layout shell once, like a bordered card, and let every screen fill it with unique content.
Type-Safe and Flexible
Because content is generic, the compiler still checks every view. You get flexibility without losing type safety.
Quick Check
Quick check on generic containers.
Recap: Build Flexible Containers
Combine @ViewBuilder with a generic content type to make containers that wrap any views. Reusable shells, full type safety. 🧠
Часто задаваемые вопросы
Урок «ViewBuilder и обобщённые контейнеры» бесплатный?
Да — полный текст урока «ViewBuilder и обобщённые контейнеры» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SwiftUI Academy, подпишись на CoddyKit PRO. Курс SwiftUI Academy содержит 4 уроков всего.
Чему я научусь в уроке «ViewBuilder и обобщённые контейнеры»?
Принимайте произвольное содержимое с помощью @ViewBuilder. Ты практикуешь SwiftUI Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SwiftUI Academy?
Предыдущий опыт не требуется. SwiftUI Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «ViewBuilder и обобщённые контейнеры»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SwiftUI Academy?
Да. Каждый урок SwiftUI Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Выделение переиспользуемых представлений
- Пользовательские ViewModifiers
- ButtonStyle и LabelStyle
- ViewBuilder и обобщённые контейнеры