微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在onDelete函数中获取已删除项目的值

如何解决在onDelete函数中获取已删除项目的值

我遇到了问题。我需要使用 .onDelete 函数删除的项目的值。我是新手,我不知道该怎么做。如果有人可以在这里帮助我,那将是很好的。谢谢。

列表:

struct TimeStampList: View {
    
    @EnvironmentObject var user: User
    @Observedobject var viewmodel: SingleEntriesviewmodel
    
    var body: some View {
        List {
            ForEach(0..<self.viewmodel.timeStamps.count,id: \.self) { timeStamp in
                Section(header: Text("\(TimeStamp.convertToReadableString(date: self.viewmodel.timeStamps[timeStamp].date))")) {
                    if (self.viewmodel.timeStamps[timeStamp].dayType != "V") {
                        ForEach(self.viewmodel.timeStamps[timeStamp].times,id: \.self) { time in
                            SingleEntriesRow(time: time,id: UUID())
                        }.onDelete { times in
                            self.deleteTimeStamps(timeStamp: timeStamp,row: times)
                        }
                    }
                    else {
                        Text("V")
                    }
                }
            }
        }
    }
    
    func deleteTimeStamps(timeStamp: Int,row: IndexSet) {
        self.viewmodel.timeStamps[timeStamp].deleteTime(at: row)
        self.viewmodel.sortTimeStamps()
        self.viewmodel.timeStamps[timeStamp].times[row] // <- I need this but row is of type IndexSet not Int.
    }
}

时间戳记:

struct TimeStamp: Identifiable { 
   var id = UUID() 
   var date: Date 
   var times: [String]
   var dayType: String 
}

viewmodel:

class SingleEntriesviewmodel: ObservableObject { 
   @Published var timeStamps = [TimeStamp]() 
}

解决方法

这是因为IndexSet是类型为Int的索引的集合

您可以获取第一个索引:

if let index = row.first {
    // index is of type `Int`
    // let result = self.viewModel.timeStamps[timeStamp].times[index]
}

或使用forEach遍历所有索引:

row.forEach { index in
    // index is of type `Int`
    // let result = self.viewModel.timeStamps[timeStamp].times[index]
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。