ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
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 ကျန်ရှိနေမှာပါ.
အတူတူ ကြည့်မယ်
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) }
}
}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 ပါ)။