Веб-версияОткрыть в Telegram

Пост😏 SwiftUI: почему Group всё ещё считается вредным

16 декабря 2025
E
Egor Mezhin
Фотография
нажмите — покажем
😏 SwiftUI: почему Group всё ещё считается вредным Почитал интересную статью от Two Cent Studios про контейнер Group в SUI – и она очень точно формулирует проблему, с которой многие сталкивались, но не сразу могли понять. 🍕 Что вообще такое Group В SUI Group часто воспринимается как способ логически сгруппировать несколько View. Он не участвует в layout и не появляется в иерархии, а лишь влияет на то, как SUI обрабатывает вложенные элементы. И именно эта неочевидность часто становится источником проблем. 😫 Где начинаются проблемы Group { if isLoading { ProgressView() } else { ContentView() } } .onAppear { fetchData() } Интуитивно кажется, что fetchData() вызовется один раз – при появлении Group. Но на практике SUI распространяет onAppear на каждое View внутри Group. В результате fetchData() может вызваться и для ProgressView, и для ContentView. То есть логика внезапно начинает жить в двух местах, хотя визуально это вообще не очевидно. 🍕 Главный посыл статьи Ключевая мысль статьи сводится к следующему: Group чаще всего используется там, где логически должен быть отдельный View. ⚠️ Почему Group так легко превращается в проблему - Group не изолирует логику - Group не изолирует модификаторы и автоматически применяет их ко всем вложенным View - скрывает реальную структуру экрана - усложняет понимание body, особенно при условиях Код выглядит компактно, но становится менее предсказуемым. ✅ Что использовать вместо Group 1. Вынос в отдельную View Вместо: Group { Text("Title") Text("Subtitle") } .foregroundStyle(.red) Лучше: HeaderView() .foregroundStyle(.red) - лучше читается - проще переиспользовать - легче тестировать 2. Реальные layout-контейнеры Если важно именно как элементы располагаются на экране, а не просто сгруппировать код – подойдут: - VStack - HStack - ZStack - Grid - Section Они явно показывают структуру интерфейса, а не маскируют её. 3. ViewBuilder Если Group появляется просто потому, что body стал слишком большим – это хороший сигнал к декомпозиции, а не к ещё одному уровню вложенности. 😅 В итоге Group не решает задачу структуры интерфейса. Он лишь влияет на то, как SUI обрабатывает вложенные View, не делая это очевидным из кода. В результате логика жизненного цикла и применение модификаторов становятся менее прозрачными. Практическое правило простое: если в коде появляется Group, стоит проверить, не напрашивается ли здесь отдельный View. #R #SwiftUI 👏
10 · 242 ·

Рядом в ленте

KKirill Smirnov😋 Как работают xcodebuild, swift-build и Swift Build — разница и отношения внутри экосистемы Swift В продолжение рассмотренных тем касающихся систем сборки: 😃 TKKirill Smirnov🤖 Все, что нужно знать о push-уведомлениях в iOS Иногда одна статья хорошо подсвечивает, насколько push-уведомления в iOS — это не «показать алерт», а сложная с
это сообщение
VVlad Tkachenko😄 Мифы о совершенной архитектуре Многие команды внедряют достаточно сложные архитектуры (VIPER, Clean Architecture), которые признаны неким стандартом, но которSSergio Petrov😄Почему мы стараемся минимизировать сторонние зависимости? Интеграция сторонней библиотеки часто кажется спасением: 10 минут вместо нескольких спринтов самостоя
YYDC — Pizza Powered iOSYDC — Pizza Powered iOS@YoungDaCode · канал · Технологии
243подписчиков150постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем