S SmartDocs
시리즈: iOS App swift 79 줄 · 업데이트 2026-06-25

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)
}

관련 글