我有一个简单的包含在ObservableObject中的部分列表(List)。我希望能够从另一个视图中对它们进行重新排序。
这是我的代码:
但在尝试移动部分时,我在
我应该如何更改部分的顺序?
这是我的代码:
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") }
并执行您的场景 - 您会看到的。在SwiftUI 2.0中使用@StateObject
也没有更好。您遇到了非常有趣的SwiftUI错误。)) - Asperi