Плохая производительность с вложенными типами стоимостиIOS

Программируем под IOS
Ответить
Anonymous
 Плохая производительность с вложенными типами стоимости

Сообщение Anonymous »

Я испытываю плохую производительность Swiftui из -за вложенных типов значений, запускающих redraws в иерархии просмотра. Вот пример:
У меня есть модель данных с вложенными отношениями с родителями/ребенком/внуком:

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

struct Parent: Identifiable, Hashable {
let id: UUID
var children = [Child]()
}

struct Child: Identifiable, Hashable {
let id: UUID
var children = [Grandchild]()
}

struct Grandchild: Identifiable, Hashable {
let id: UUID
var name = ""
}
Для каждой модели у меня есть настройка stensview , которая принимает привязку к модели и перемещается к своим детям, если таковые имеются:

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

struct ParentSettingsView: View {
@Binding var parent: Parent
var body: some View {
List(parent.children.indices, id: \.self) { i in
NavigationLink(parent.children[i].id.uuidString, value: parent.children[i])
}
.navigationDestination(for: Child.self) { child in
let idx = parent.children.firstIndex(where: {$0.id == child.id})!
ChildSettingsView(child: $parent.children[idx])
}
}
}
// ChildSettingsView is basically identical
Наконец, в нижней части стека-GrandChildSettingSview :

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

struct GrandchildSettingsView: View {
@Binding var grandchild: Grandchild
var body: some View {
TextField("Name", text: $grandchild.name)
}
}
typling имя в GrandChildSettingSview приводит к перераспределению всей иерархии представления с каждым клавишом, потому что мутация для гранда также является мутацией для ребенка , а также для родителей и т. Д. Типы технически работают, но это приводит к другим вопросам при работе с отправленным , кодирующим и т. Д. Использование структур является гораздо более легким для этого приложения.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... alue-types
Ответить

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

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

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

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

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