I have a managed object, Treatment
, in a one-to-many relationship with another managed object TreatmentTime
.
I am presenting the different TreatmentTime
objects associated with a given Treatment
in a ForEach
and I want to be able to animate adding and deleting TreatmentTime
's. I've tried a whole bunch of things but none of it has worked.
/// this is being presented within another view
struct TreatmentView_Manual: View {
@ObservedObject var treatment: Treatment
var body: some View {
ForEach(Array(zip(Array(treatment.treatmentTimes as? Set ?? Set<TreatmentTime>()).sorted { $0.time ?? Date() < $1.time ?? Date() }, treatment.wrappedTreatmentTimes.indices)), id: \.0) { (treatmentTime, index) in
Treatment_DatePicker(treatmentTime: treatmentTime, index: index)
}
HStack {
Button("Add another") {
addTreatment()
}
Spacer()
if treatment.numberOfAdmins > 1 {
Button("Remove last"){
removeTreatment()
}.foregroundColor(.red)
}
}
}
func addTreatment() {
treatment.addToTreatmentTimes(TreatmentTime(context: treatment.managedObjectContext!))
}
func removeTreatment(_ treatmentTime: TreatmentTime) {
// function not yet written
}
}
struct Treatment_DatePicker: View {
@ObservedObject var treatmentTime: TreatmentTime
let index: Int
var body: some View {
DatePicker("Dose #\(index + 1)", selection: $treatmentTime.time ?? Date())
}
}
Any advice would be greatly appreciated. Additionally, if you notice anything else pertaining to my code that can be improved I would love to hear it as well.