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

Local Storage (SwiftData)

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

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

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

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

SwiftData က Core Data (Apple ရဲ့ traditional local database framework) ကို modernize လုပ်ထားတဲ့, Swift-native syntax ပါတဲ့ framework ပါ — `@Model` macro ကို class ပေါ်ထည့်ရုံနဲ့ (Android ရဲ့ Room `@Entity` နဲ့ concept တူပါတယ်) database table ကို auto-generate ပေးပါတယ်, manual SQL/DAO ရေးစရာ မလိုပါ။ `@Query` property wrapper ကို View ထဲမှာ သုံးရင် database ထဲက data ကို automatic fetch/observe လုပ်ပေးပါတယ် — data change ရင် UI ကို automatic update ပေးပါတယ် (Room ရဲ့ Flow concept နဲ့ ဆင်တူပါတယ်).

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

`@Model class TodoItem { var title: String; var isDone: Bool; init(title: String, isDone: Bool = false) { self.title = title; self.isDone = isDone } }` ကို define လုပ်ပြီး, View ထဲမှာ `@Query private var todos: [TodoItem]` လို့ ရေးရင် — database ထဲက todo item အားလုံးကို automatic fetch ပြီး, `modelContext.insert(newTodo)` ခေါ်ရင် data ကို device disk ပေါ် permanent သိမ်းပေးပါတယ်, app ကို force-close ပြီး ပြန်ဖွင့်ရင်တောင် data ကျန်ရှိနေမှာပါ.

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

swift
import SwiftData

@Model
class TodoItem {
    var title: String
    var isDone: Bool

    init(title: String, isDone: Bool = false) {
        self.title = title
        self.isDone = isDone
    }
}

struct TodoListScreen: View {
    @Environment(\.modelContext) private var modelContext
    @Query private var todos: [TodoItem]

    var body: some View {
        List(todos) { todo in Text(todo.title) }
    }
}
You should see
App ကို force-close ပြီး ပြန်ဖွင့်တောင် todo list data ပျောက်မသွားဘဲ ဆက်ရှိနေတာ (SwiftData ကနေ ပြန်ဆွဲထားလို့) တွေ့ရမည်။

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

`TodoItem` (@Model) ကို ကိုယ်တိုင်ရေးကြည့်ပြီး, `TodoListScreen` ထဲက `@Query` နဲ့ display လုပ်ကြည့်ပါ — `modelContext.insert()` နဲ့ item အသစ် ထည့်ကြည့်ပြီး app force-close/reopen ပြီးတောင် data ကျန်ရှိနေကြောင်း confirm လုပ်ကြည့်ပါ။

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

`@Model` schema (property) ကို app update လုပ်တဲ့အခါ ပြောင်းလဲရင် — migration strategy မထားဘဲ ပြောင်းလိုက်ရင် existing user ရဲ့ data compatibility ပြဿနာ ဖြစ်နိုင်ပါတယ် (Room ရဲ့ version/Migration concept နဲ့ တူညီတဲ့ risk ပါ)။

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

  • `@Model` class ကို `Codable` (URLSession lesson) နဲ့ ရောထင်ခြင်း — `@Model` က local database persistence အတွက်, `Codable` က JSON encode/decode အတွက် ရည်ရွယ်ချက်ကွဲပြားပါတယ်
  • `modelContext.insert()` ခေါ်ပြီးရင် `try modelContext.save()` ကို မေ့ခြင်း (auto-save enabled မဟုတ်ရင်) — data ကို disk ပေါ် permanent မသိမ်းသွားနိုင်ပါ

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

`TodoItem` (@Model) ကို ကိုယ်တိုင်ရေးကြည့်ပြီး, `TodoListScreen` ထဲက `@Query` နဲ့ display လုပ်ကြည့်ပါ — `modelContext.insert()` နဲ့ item အသစ် ထည့်ကြည့်ပြီး app force-close/reopen ပြီးတောင် data ကျန်ရှိနေကြောင်း confirm လုပ်ကြည့်ပါ။

You'll know it worked when: App ကို force-close ပြီး ပြန်ဖွင့်တောင် todo list data ပျောက်မသွားဘဲ ဆက်ရှိနေတာ (SwiftData ကနေ ပြန်ဆွဲထားလို့) တွေ့ရမည်။

Local Storage (SwiftData) | Thuta Learning