Какие компоненты SwiftUI используются для отображения коллекций данных?

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

Ответ

SwiftUI предоставляет несколько компонентов для рендеринга коллекций, каждый со своей областью применения:

  1. List – стандартный вертикальный список с нативным поведением iOS (разделители, жесты свайпа для удаления). Идеален для отображения простых строк или настраиваемых строк. Поддерживает секции, заголовки и подвалы.

    List(items) { item in
        Text(item.title)
    }
  2. ForEachне визуальный контейнер, а структура данных, которая генерирует представления из коллекции. Используется внутри других лэйаутов (VStack, HStack, ScrollView). Требует, чтобы данные были Identifiable.

    VStack {
        ForEach(items) { item in
            RowView(item: item)
        }
    }
  3. ScrollView с LazyVStack/LazyHStack – решение для кастомных, сложносоставных макетов (например, ленты). Lazy-стэки загружают элементы по мере необходимости, что эффективно для длинных списков, но они не переиспользуют ячейки как UITableView.

    ScrollView {
        LazyVStack {
            ForEach(items) { item in
                CardView(item: item)
            }
        }
    }
  4. Grid (iOS 16+) – система для создания выровненных сеток с помощью контейнеров Grid и строк GridRow.

    Grid {
        ForEach(items) { item in
            GridRow {
                Image(systemName: item.icon)
                Text(item.name)
            }
        }
    }

Выбор компонента:

  • Используйте List для типичных списков настроек или данных.
  • Используйте ScrollView + LazyVStack для максимально кастомного дизайна ленты.
  • Используйте Grid для выровненных табличных данных или сеток изображений.