昨天建立好基本的 UI 了,今天要來試著儲存資料到 SwiftData 裡。
還記得之前介紹 ModelContainer 時提過的 ModelContext 嗎?這里就會用上了。
使用的方式首先是要透過 @Environment 將它設定好,這樣就能使用了。
@Environment(\.modelContext) var context
設定好之後,接下來就是將資料存進 SwiftData 裡,方法也很簡單,將資料輸入之後,只需要一行就能將資料存進 SwiftData 裡。
let expense = Expense(name: name, date: date, value: value)
context.insert(expense)
ModelContainer 在儲存資料的時候 SwiftData 也會自動儲存,要是還不放心的話可以試試加上這行,這樣能成功儲存資料。
let expense = Expense(name: name, date: date, value: value)
context.insert(expense)
try! context.save()
到這裡的程式看起來應該就像這樣。
struct AddExpenseSheet: View {
@Environment(\.modelContext) var context
@Environment(\.dismiss) private var dismiss
@State private var name: String = ""
@State private var date: Date = .now
@State private var value: Double = 0
var body: some View {
NavigationStack {
Form {
TextField("Expense name", text: $name)
DatePicker("Date", selection: $date, displayedComponents: .date)
TextField("value", value: $value, format: .currency(code: "USD"))
.keyboardType(.decimalPad)
}
.navigationTitle("New Expense")
.navigationBarTitleDisplayMode(.large)
.toolbar {
ToolbarItemGroup(placement: .topBarLeading) {
Button("Cancel") {
dismiss()
}
}
ToolbarItemGroup(placement: .topBarTrailing) {
Button("Save") {
let expense = Expense(name: name, date: date, value: value)
context.insert(expense)
try! context.save()
dismiss()
}
}
}
}
}
}
這樣就能順利的將資料存進 SwiftData 中,但是實際跑起來之後會發現,資料是存進去了,主畫面卻還是沒有顯示任何東西。
那是因為資料是存進去了沒錯,這裡卻沒有將資料撈出來,所以明天來做一下撈資料的方式吧。