Я сделал все возможное провел исследование и обнаружил, что добавление раздела работает, а добавление строки в раздел не работает.
Я что-то упустил.
Код
Код: Выделить всё
import SwiftUI
struct TestList: View {
@State var sections : [SectionModel] =
[
SectionModel(id: 1, rows:
[
RowModel(id: 1, name: "1"),
RowModel(id: 2, name: "2")
]
),
SectionModel(id: 2, rows:
[
RowModel(id: 1, name: "1"),
RowModel(id: 2, name: "2")
]
)
]
var body: some View {
List{
ForEach (sections) { section in
Section(){
ForEach(section.rows) {row in
Button {
addRow() // does not work
addSection() // works
} label: {
Text(row.name)
}
}
}
}
}
}
func addRow() {
sections[0].addRow(row: RowModel.init(id: 10, name: "10"))
}
func addSection() {
sections.append(SectionModel.init(id: 23, rows: [RowModel.init(id: 10, name: "10")]))
}
}
class RowModel : Identifiable{
var id: Int
let name : String
init(id: Int, name: String) {
self.id = id
self.name = name
}
}
class SectionModel : Identifiable{
var id : Int
var rows : [ RowModel]
init(id: Int, rows:[ RowModel]) {
self.id = id
self.rows = rows
}
func addRow (row : RowModel) {
rows.append(row)
}
}
Это работает,
Код: Выделить всё
func addrow() {
var section = sections[0]
section.addRow(row: RowModel.init(id: 10, name: "10"))
sections[0] = section
}
Если раздел (который является элементом/элементом в разделах) который упоминается в ForEach как источник данных) изменяется напрямую, это оказывает влияние на пользовательский интерфейс.
если какой-либо элемент/элемент (строка) внутри раздел меняется (элементы 2-го уровня) эффекта нет в Пользовательский интерфейс.
Кроме того, как указано в выбранном ответе, раздел передается при нажатии кнопки, изменяет раздел, поэтому он работает.
Структура или класс не имеют никакого отношения к этой проблеме.
Подробнее здесь: https://stackoverflow.com/questions/766 ... s-sections
Мобильная версия