[英]ForEach onDelete Mac
我想弄清楚如何從 swiftui for Mac 中的數組中刪除。 我能找到的所有文章都展示了如何使用 UIKit 方法將 .ondelete 方法添加到 foreach。 這不適用於 Mac,因為我沒有像 iOS 那樣的紅色刪除按鈕。 那么如何在 Mac 上的 ForEach 中從數組中刪除項目。 這是我嘗試過的代碼,它給了我錯誤
Fatal error: Index out of range: file
import SwiftUI
struct ContentView: View {
@State var splitItems:[SplitItem] = [
SplitItem(id: 0, name: "Item#1"),
SplitItem(id: 1, name: "Item#2")
]
var body: some View {
VStack {
Text("Value: \(self.splitItems[0].name)")
ForEach(self.splitItems.indices, id:\.self) { index in
HStack {
TextField("Item# ", text: self.$splitItems[index].name)
Button(action: {self.removeItem(index: index)}) {Text("-")}
}
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
func removeItem(index:Int) {
self.splitItems.remove(at: index)
}
}
struct SplitItem:Identifiable {
var id:Int
var name:String
}
您的ForEach
代碼部分是完全正確的。 可能的錯誤來源可能是行Text("Value: \\(self.splitItems[0].name)")
- 刪除所有項目后,這肯定會崩潰。
下一個假設是VStack
。 繪制視圖層次結構后,將不允許更改它。 如果您用Group替換 VStack 並且下一個代碼將起作用:
var body: some View {
Group {
if !self.splitItems.isEmpty {
Text("Value: \(self.splitItems[0].name)")
} else {
Text("List is empty")
}
ForEach(self.splitItems.indices, id:\.self) { index in
HStack {
TextField("Item# ", text: self.$splitItems[index].name)
Button(action: {self.removeItem(index: index)}) {Text("-")}
}
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
所以我能夠在這篇文章中找到答案,
而不是通過傳遞來自 for 循環的索引來調用 array.remove(at) 使用 array.FirstIndex(where) 調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.