Почему Swiftui перекрасил тело моего индивидуального представления, поскольку ничего не связано с ним, не меняется?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Почему Swiftui перекрасил тело моего индивидуального представления, поскольку ничего не связано с ним, не меняется?

Сообщение Anonymous »

Вот пример: < /p>

Код: Выделить всё

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()
}
Просто, когда вы нажимаете первую кнопку , она не должна перерисовать Demomonthview, но это так. Почему? Мне действительно нужно избегать этого, нажимая каждый раз, когда первая кнопка . Второй кнопка перекрасовки Demomonthview Просмотреть правильно, что я понимаю. Но почему первое? Есть FetchRequest с тяжелыми вычислениями, которые нельзя называют так часто, как нажимать на кнопку, как здесь, в примере, когда нажатие этой кнопки не меняет ничего, что связано с Demomonthview.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... o-him-chan
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»