[英]SwiftUI .onDelete get var from ForEach
我有這個代碼:
struct CreateInfo: Identifiable {
var id: String
var name: String
var time: String
var day: String
var isDeleted: Bool
}
struct ZettelView: View {
@State var zettelInfos = [CreateInfo]()
@State private var showingAlert = false
@State private var savedValueForDeleteFunction: CreateInfo
func createNewInfo() {
var arr = [[String]]()
arr = getZettelData()
for x in arr {
zettelInfos.append(CreateInfo(id: "\(x[0])", name: "\(x[1])", time: "\(x[2])", day: "\(x[3])", isDeleted: false))
}
self.executeThisAsyncThing = false
}
@State var executeThisAsyncThing: Bool = true
var body: some View {
DispatchQueue.main.async {
if self.executeThisAsyncThing {
self.createNewInfo()
}
}
return VStack {
//New - testing
NavigationView {
List {
ForEach(zettelInfos) { x in
NavigationLink(destination: zettelDetailView(uuid: x.id, info: x)) {
Text("\(x.id)")
}
}.onDelete(perform: delete)
}.navigationBarTitle("Einkaufszettel")
.navigationBarItems(trailing: Button(action: {
self.addRow()
}) {
Image(systemName: "plus.app.fill")
})
}
.alert(isPresented: $showingAlert) {
Alert(title: Text(" meImportantssage"), message: Text("Wear sunscreen"), dismissButton: .default(Text("Got it!")))
}
}
}
func delete(at offsets: IndexSet) {
zettelInfos.remove(atOffsets: offsets)
self.showingAlert = true
}
private func addRow() {
let dateAndTime = Date()
let dfDay = DateFormatter()
let dfTime = DateFormatter()
dfDay.dateFormat = "dd.MM.yyyy"
dfTime.dateFormat = "HH:mm:ss"
let day = dfDay.string(from: dateAndTime)
let time = dfTime.string(from: dateAndTime)
let x = CreateInfo(id: UUID().uuidString, name: "Neuer Zettel", time: time, day: day, isDeleted: false)
saveZettelData(x: x)
zettelInfos.append(x)
}
}
所以我的問題是,如何將 ForEach 中的 x 變量解析為刪除函數?
我為什么要這個? -> foreach 中的 x 變量有一個 UUID,我需要來自x
的 UUID
你們有誰知道一種方法,我如何從x
獲取 UUID ?
這是我第一個使用 swift 的應用程序,我正在嘗試學習它,但在某些情況下,它與我知道的其他語言不同。 通常我會將一個值解析為刪除 function 然后遍歷它以查找並刪除特定的行/數據,但在 swift 中它是 Z34D1F91FB2E514B8576BZ、IB1A75A89A 的另一種方式。
這是一種擁有它的方法
func delete(at offsets: IndexSet) {
let index = offsets[offsets.startIndex]
let x = zettelInfos[index]
// ... do anything needed with x.id now
zettelInfos.remove(atOffsets: offsets)
self.showingAlert = true
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.