ContentView.swift
iOS_App/To-Do-List-Demo/To-Do-List-Demo/ContentView.swift
//
// ContentView.swift
// To-Do-List-Demo
//
// Created by Nelson Lai on 2026/6/25.
//
import SwiftUI
import SwiftData
struct ContentView: View {
@Environment(\.modelContext) private var modelContext
@Query(sort: \Item.timestamp, order: .reverse) private var items: [Item]
@State private var isAddingItem = false
var body: some View {
NavigationSplitView {
List {
ForEach(items) { item in
NavigationLink {
ItemDetailView(item: item)
} label: {
VStack(alignment: .leading, spacing: 4) {
Text(item.subject)
.font(.headline)
if !item.itemDescription.isEmpty {
Text(item.itemDescription)
.font(.subheadline)
.foregroundStyle(.secondary)
.lineLimit(2)
}
}
}
}
.onDelete(perform: deleteItems)
}
.navigationTitle("To-Do List")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
EditButton()
}
ToolbarItem {
Button {
isAddingItem = true
} label: {
Label("Add Item", systemImage: "plus")
}
}
}
.sheet(isPresented: $isAddingItem) {
AddItemView { subject, description in
addItem(subject: subject, itemDescription: description)
}
}
} detail: {
Text("Select an item")
}
}
private func addItem(subject: String, itemDescription: String) {
withAnimation {
let newItem = Item(subject: subject, itemDescription: itemDescription)
modelContext.insert(newItem)
}
}
private func deleteItems(offsets: IndexSet) {
withAnimation {
for index in offsets {
modelContext.delete(items[index])
}
}
}
}
#Preview {
ContentView()
.modelContainer(for: Item.self, inMemory: true)
}
関連記事
AddItemView.swift
AddItemView.swift — swift source code from the iOS App learning materials (iOS_App/To-Do-List-Demo/To-Do-List-Demo/AddItemView.swift).
記事を読む →Item.swift
Item.swift — swift source code from the iOS App learning materials (iOS_App/To-Do-List-Demo/To-Do-List-Demo/Item.swift).
記事を読む →ItemDetailView.swift
ItemDetailView.swift — swift source code from the iOS App learning materials (iOS_App/To-Do-List-Demo/To-Do-List-Demo/ItemDetailView.swift).
記事を読む →To_Do_List_DemoApp.swift
To_Do_List_DemoApp.swift — swift source code from the iOS App learning materials (iOS_App/To-Do-List-Demo/To-Do-List-Demo/To_Do_List_DemoApp.swift).
記事を読む →To_Do_List_DemoTests.swift
To_Do_List_DemoTests.swift — swift source code from the iOS App learning materials (iOS_App/To-Do-List-Demo/To-Do-List-DemoTests/To_Do_List_DemoTests.swift).
記事を読む →To_Do_List_DemoUITests.swift
To_Do_List_DemoUITests.swift — swift source code from the iOS App learning materials (iOS_App/To-Do-List-Demo/To-Do-List-DemoUITests/To_Do_List_DemoUITests.swift).
記事を読む →