iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

昨天建立好基本的 UI 了,今天要來試著儲存資料到 SwiftData 裡。

ModelContext

還記得之前介紹 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 中,但是實際跑起來之後會發現,資料是存進去了,主畫面卻還是沒有顯示任何東西。

那是因為資料是存進去了沒錯,這裡卻沒有將資料撈出來,所以明天來做一下撈資料的方式吧。


上一篇
Day 23:SwiftData(3)
下一篇
Day 25:SwiftData(5)
系列文
SwiftUI學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言