Thuta Learning
ရှာဖွေရန်
ProjectsMobile Developmentintermediate

Project — Todo App (CRUD + SwiftData + MVVM)

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Project — Todo App (CRUD + SwiftData + MVVM) ကို ကြောက်စရာမလိုအောင် နားလည်မယ်
  • ကိုယ်တိုင် Xcode/SwiftUI code ကို run ကြည့်တတ်မယ်
  • Real project ထဲမှာ ဒီ concept ကို ချက်ချင်း အသုံးချတတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

Real app တစ်ခုမှာ layer အလိုက် ခွဲထားရပါတယ် — View layer (SwiftUI screen), ViewModel layer (business logic, ObservableObject), Data layer (SwiftData model)။ Todo app က CRUD operation အားလုံး (todo အသစ်ထည့်ခြင်း-Create, list ကြည့်ခြင်း-Read, done/undone toggle-Update, item ဖျက်ခြင်း-Delete) ကို layer သုံးခုစလုံးမှာ ချိတ်ဆက်ဆောင်ရွက်ရမှာပါ.

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

`TodoItem` (@Model, data layer) → `TodoViewModel` (ObservableObject, add/toggle/delete function) → `TodoListScreen`/`AddTodoScreen` (View layer, List + NavigationStack) ဆိုပြီး layer သုံးခုကို တစ်ဆင့်ချင်း ဆောက်ပါ — NavigationStack ကို သုံးပြီး list screen ကနေ add screen ဆီ ကူးပြောင်းနိုင်အောင် ချိတ်ဆက်ပါ, `List`'s built-in swipe-to-delete ကို delete operation အတွက် သုံးနိုင်ပါတယ်.

အတူတူ ကြည့်မယ်

swift
struct TodoListScreen: View {
    @Query private var todos: [TodoItem]
    @Environment(\.modelContext) private var modelContext
    @State private var showingAddScreen = false

    var body: some View {
        NavigationStack {
            List {
                ForEach(todos) { todo in
                    HStack {
                        Image(systemName: todo.isDone ? "checkmark.circle.fill" : "circle")
                            .onTapGesture { todo.isDone.toggle() }
                        Text(todo.title)
                    }
                }
                .onDelete { indices in
                    for index in indices { modelContext.delete(todos[index]) }
                }
            }
            .navigationTitle("Todos")
            .toolbar {
                Button("Add") { showingAddScreen = true }
            }
        }
    }
}
You should see
Todo app ကို run ရင် — todo ထည့်နိုင်, done/undone toggle လုပ်နိုင်, swipe-to-delete လုပ်နိုင်, app restart လုပ်လည်း data ကျန်ရှိနေတာ တွေ့ရမည်။

၅ မိနစ် စမ်းကြည့်

Todo app တစ်ခုလုံးကို layer ၃ ခု (Data/ViewModel/View) ဖြင့် ကိုယ်တိုင် ဆောက်ကြည့်ပါ — CRUD operation ၄ ခုလုံး Simulator ပေါ်မှာ အလုပ်လုပ်ကြောင်း verify လုပ်ကြည့်ပါ။

သတိလေးတစ်ချက်

Todo item ကို delete လုပ်တဲ့အခါ 'undo' option မထားဘဲ permanent delete လုပ်ရင် — user experience အတွက် alert dialog ဒါမှမဟုတ် undo gesture ကို ထည့်စဉ်းစားသင့်ပါတယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Delete confirmation dialog မထားဘဲ swipe-to-delete ကို instant delete ခွင့်ပြုခြင်း — user accidental swipe ကြောင့် data ပျောက်နိုင်ပါတယ်
  • Empty state (todo list ဗလာနေတဲ့အခါ) ကို handle မလုပ်ဘဲ blank screen ချန်ထားခြင်း — UX ကောင်းတဲ့ app တွေက 'No todos yet' message ပြပေးလေ့ရှိပါတယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

Todo app တစ်ခုလုံးကို layer ၃ ခု (Data/ViewModel/View) ဖြင့် ကိုယ်တိုင် ဆောက်ကြည့်ပါ — CRUD operation ၄ ခုလုံး Simulator ပေါ်မှာ အလုပ်လုပ်ကြောင်း verify လုပ်ကြည့်ပါ။

You'll know it worked when: Todo app ကို run ရင် — todo ထည့်နိုင်, done/undone toggle လုပ်နိုင်, swipe-to-delete လုပ်နိုင်, app restart လုပ်လည်း data ကျန်ရှိနေတာ တွေ့ရမည်။

Project — Todo App (CRUD + SwiftData + MVVM) | Thuta Learning