Код: Выделить всё
struct DemoApp: View {
@State var viewModel = DemoAppViewModel()
var body: some View {
VStack {
DemoMonthView(date: viewModel.monthDate)
DemoDayView(date: viewModel.dayDate) // FIRST
.onTapGesture {
viewModel.dayDate = viewModel.dayDate.addingTimeInterval(86000)
}
DemoDayView(date: viewModel.monthDate) // SECOND
.onTapGesture {
viewModel.monthDate = viewModel.monthDate.addingTimeInterval(1400000)
}
}
}
}
@Observable
class DemoAppViewModel {
var dayDate: Date = Date()
var monthDate: Date = Date()
}
struct DemoMonthView: View {
var date: Date
@FetchRequest private var days: FetchedResults //you need to replace Day here with any Entity that will allow to reproduce the issue
init(date: Date) {
self.date = date
_days = FetchRequest(
sortDescriptors: [SortDescriptor(\.date, order: .reverse)],
predicate: NSPredicate(value: true)
)
print("DemoMonthView init is called") //should be called, but without body redraws
// heavy calculations for given month
}
var body: some View {
if #available(iOS 17.1, *) {
print("DemoMonthView body is called") //should not be called❓
}
return VStack {
Text(date.formatted(date: .long, time: .omitted)).font(.title.bold())
}
}
}
struct DemoDayView: View {
var date: Date
var body: some View {
Text(date.formatted(date: .long, time: .omitted))
}
}
#Preview {
DemoApp()
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... o-him-chan