Проектируем UI декларативно с SwiftUI. В чем отличия UIKit и SwiftUI

Отличия SwiftUI от Swift

Использует декларативный подход. Пишем что хотим получить какую-нибудь схему, а движок по возможности делает или не делает это.

Проблема вложенных вью

Главной проблемой является то, что во многих компонентах, в частности в TabView все вью создаются даже если на них нет перехода. Это решается созданием обертки - LazyView.

Data Flow

SwiftUI использует State (Flux,Redux, MobX). Поток данных в одном направлении. От пользователя к UI.

Property Wrappers

Паттерн Декоратор.

  • @ObservableObject - каждый раз пересоздается когда вью обновляется.

  • @StateObject - живет дольше чем вью которое им владеет. Из-за этого могут быть баги.

  • @EnvironmentObject нельзя делать присвоение (как в @Binding)

Must have практики

  • Хорошая практика написание отдельных компонентов. Тем самым уменьшается работа рендера, движка SwiftUI.

  • Избегать вложенных Navigation view.