При создании представления List
, которое может содержать sh второстепенных List
элементов, симулятор XCode и холст SwiftUI останавливаются без выдачи ошибки. Приведенный ниже код описывает иерархию представлений, которую я использую для воссоздания этой проблемы:
class Listable: Identifiable {
var id: UUID = UUID()
var name: String = "Name"
var title: String = "Title"
var description: String = "This is a description"
}
struct ContentView: View {
var items: [Listable]
var body: some View {
NavigationView {
List(items) { item in
ListCell(item: item)
}
.navigationBarTitle(self.items[0].title)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(items: testList)
}
}
struct SecondaryListView: View {
var items: [Listable]
var body: some View {
List(items) { item in
ListCell(item: item)
}
.navigationBarTitle(self.items[0].title)
}
}
struct ListCell: View {
var item: Listable
var body: some View {
NavigationLink(destination: SecondaryListView(items: testSecondaryList)) {
Image(systemName: "photo")
VStack(alignment: .leading) {
Text(item.name)
.font(.title)
.fontWeight(.light)
Text(item.description)
}
}
}
}
let testList = [
Listable(),
Listable(),
Listable()
]
let testSecondaryList = [
Listable(),
Listable(),
Listable(),
Listable(),
Listable(),
Listable()
]
Примечание : если я заменим объект List
в SecondaryListView
на ForEach
( как показано ниже), код компилируется и запускается без проблем, и я могу перемещаться по стеку так, как мне бы хотелось.
struct SecondaryListView: View {
var items: [Listable]
var body: some View {
ForEach(items) { item in
ListCell(item: item)
}
.navigationBarTitle(self.items[0].title)
}
}
Запрещено выдвижение представления списка из представления списка. или это ошибка? Возможно, это вызывает утечку памяти - процессор в моем основном потоке достигает 99%.