相关疑难解决方法(0)

从 SwiftUI 的列表中删除列表元素

SwiftUI 似乎有一个相当烦人的限制,这使得很难创建一个List或一段ForEach时间来绑定到每个元素以传递给子视图。

我见过的最常建议的方法是迭代索引,并获得与的绑定$arr[index](事实上​​,当他们删除的一致性时,Apple 提出了类似的建议):BindingCollection

@State var arr: [Bool] = [true, true, false]

var body: some View {
   List(arr.indices, id: \.self) { index in
      Toggle(isOn: self.$arr[index], label: { Text("\(idx)") } )
   }
}
Run Code Online (Sandbox Code Playgroud)

一直有效,直到数组的大小发生变化,然后它因索引超出范围运行时错误而崩溃。

这是一个会崩溃的例子:

class ViewModel: ObservableObject {
   @Published var arr: [Bool] = [true, true, false]
    
   init() {
      DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
         self.arr = []
      }
   }
}

struct ContentView: View {
   @ObservedObject …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

11
推荐指数
1
解决办法
1705
查看次数

删除行时SwiftUI ForEach索引超出范围错误

我有一个ForEach块和一个Stepper嵌入在List视图中。List视图第一部分的内容如下:

ForEach(record.nodes.indices, id: \.self) { index in
    HStack {
        TextField("X", text: self.$record.nodes[index].xString)
        Spacer()
        Divider()
        TextField("Y", text: self.$record.nodes[index].yString)
        Spacer()
    }
}
Stepper("± node", onIncrement: {
    self.record.nodes.append(Node(x: 0, y: 0))
}, onDecrement: {
    self.record.nodes.removeLast()
})
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,在调用 时self.record.nodes.removeLast(),应用程序因Index out of range错误而崩溃。我一直试图解决这个问题几个小时,但无济于事。

我最初使用onDelete,但是产生了同样的问题。

该项目可以在https://github.com/jacobcxdev/Timekeeper找到,此错误发生在RecordDetailView.swift 中

ios swift swiftui

8
推荐指数
2
解决办法
4329
查看次数

标签 统计

swift ×2

swiftui ×2

ios ×1