У меня есть простой List
с разделами, которые хранятся внутри ObservableObject
. Я бы хотел изменить их порядок с другой точки зрения.
Это мой код:
class ViewModel: ObservableObject {
@Published var sections = ["S1", "S2", "S3", "S4"]
func move(from source: IndexSet, to destination: Int) {
sections.move(fromOffsets: source, toOffset: destination)
}
}
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
@State var showOrderingView = false
var body: some View {
VStack {
Button("Reorder sections") {
self.showOrderingView = true
}
list
}
.sheet(isPresented: $showOrderingView) {
OrderingView(viewModel: self.viewModel)
}
}
var list: some View {
List {
ForEach(viewModel.sections, id: \.self) { section in
Section(header: Text(section)) {
ForEach(0 ..< 3, id: \.self) { _ in
Text("Item")
}
}
}
}
}
}
struct OrderingView: View {
@ObservedObject var viewModel: ViewModel
var body: some View {
NavigationView {
List {
ForEach(viewModel.sections, id: \.self) { section in
Text(section)
}
.onMove(perform: viewModel.move)
}
.navigationBarItems(trailing: EditButton())
}
}
}
Но в OrderingView
при попытке переместить разделы я получаю такую ошибку: Попытка создать две анимации для ячейки. Скорее всего, потому, что изменился порядок разделов.
Как изменить порядок разделов?
init() { print("created") }
для ViewModel и выполните свой сценарий - вы увидите. С@StateObject
в SwiftUI 2.0 не лучше. Вы столкнулись с очень интересной ошибкой SwiftUI. )) - person Asperi   schedule 20.07.2020