我了解以下代码可以工作:
struct ContentView: View {
func removeRows(at offsets: IndexSet) {
numbers.remove(atOffsets: offsets)
}
@State private var numbers = [Int]()
@State private var currentNumber = 1
var body: some View {
VStack {
List {
ForEach(numbers, id: \.self) {
Text("\($0)")
}
.onDelete(perform: removeRows)
}
Button("Add Number") {
self.numbers.append(self.currentNumber)
self.currentNumber += 1
}
}
}
}
我不明白的是
.onDelete()
自定义函数处理程序中的 removeRows(at offsets: IndexSet)
如何工作。特别是,为什么在 offsets:
前面有一个关键字 at
。例如,可以使用 on
吗?这个参数标签只是为了让我们更好地理解代码吗?然后还有
IndexSet
,我认为它是一种用于索引的 Int 类型或用于在列表中删除行的 Int 范围类型,以便 SwiftUI 知道要删除哪一行。我认为我理解
numbers.remove(atOffsets: offsets)
是用于实际删除 offsets
中的列表行(就被删除的实际行索引而言)- 但我不确定 Swift 如何知道 offsets
的值?实际上,offsets
是什么,它的值如何设置?我正在尝试通过遵循这个来学习。我对 SwiftUI 只有非常基本的了解,请像我完全不懂一样解释。
at
?(我发现swift.org上的解释对我来说不够明确)。但我仍然对我的其他问题感到困惑。 - Super Noob