Таймер обратного отсчёта перерисовывает весь экран каталога раз в секунду
final class CatalogStore: ObservableObject {
@Published var products: [Product] = [] // 500 товаров
@Published var saleSecondsLeft = 3600 // меняется каждую секунду
}
struct CatalogScreen: View {
@ObservedObject var store: CatalogStore
var body: some View {
VStack {
SaleBanner(seconds: store.saleSecondsLeft)
ProductGrid(products: store.products)
}
}
}
Instruments показывает, что body экрана и сетки пересчитываются каждую секунду. Минимальная версия — iOS 17. Какое решение точнее всего?
- Перейти на @Observable: учёт чтения свойств
- Обновлять таймер раз в 5 секунд
- Сделать ProductGrid классом, а не структурой
- Обернуть сетку в LazyVStack
