struct ContentView: View {
   @State private var appData = ApplicationData.shared
   @State private var sort = [KeyPathComparator(\ConsumableItem.name)]

   var body: some View {
      Table(appData.listOfItems, sortOrder: $sort) {
         TableColumn("Name", value: \.name)
         TableColumn("Category", value: \.category)
         TableColumn("Calories") { item in
            Text("\(item.calories)")
         }.width(100)
         TableColumn("Included", value: \.included, comparator: CompareBool()) { item in
            Toggle("", isOn: itemBinding(id: item.id).included)
                .labelsHidden()
         }.width(100)
      }
      .onChange(of: sort) {
         appData.listOfItems.sort(using: sort)
      }
   }
   func itemBinding(id: UUID) -> Binding<ConsumableItem> {
      @Bindable var appData = appData

      let index = appData.listOfItems.firstIndex(where: { $0.id == id }) ?? 0
      return $appData.listOfItems[index]
   }
}