以往如果要在iOS App資料庫來存取資料的話,通常會使用sqlite或者iOS內建的CoreData,但是這兩個方式都非常複雜,使用上還要考慮同時寫入的問題等,所以在iOS17提供一個全新的資料庫方法,稱為SwiftData。
SwiftData不用使用特定資料庫檔案來建置資料庫,直接使用程式碼方式來建構,例如:
final class User {
var name: String
var email: String
init(name: String, email: String) {
self.name = name
self.email = email
}
}
使用類別來建置SwiftData資料表,使用變數來建置資料欄位,並且使用init方式來初始化變數。
接下來匯入SwiftData:
import SwiftData
然後將這個類別定義為SwiftData,例如:
@Model
final class User {
var name: String
var email: String
init(name: String, email: String) {
self.name = name
self.email = email
}
}
修改專案的程式碼進入點:
WindowGroup {
ContentView()
.modelContainer(for: User.self)
}
將User類別加入到專案之內,表示整個專案都可以呼叫使用這個User類別。
接下來開始使用SwiftData,宣告一個變數modelContext,為環境變數狀態,與一個陣列來儲存User資料。
@Environment(\.modelContext) private var modelContext
@Query private var users: [User]
所以如果要存取這個User資料,可以使用List元件將陣列的資料全部顯示出來,例如:
List(users) { user in
HStack {
Text(user.name)
Text(user.email)
}
}
但因為SwiftData建立時,並沒有任何User的資料,所以上面這個顯示會時空白,必須要手動加入資料,才會顯示。
所以另外製作一個按鈕,當按下按鈕時,會新增資料到SwiftData內,例如:
Button(action: {
let newUser = User(name: "Jake", email: "Jake@mail")
modelContext.insert(newUser)
}, label: {
Text("新增")
})
新增資料時,只要將User資料,用modelContext.insert指令加入即可。
如此一來,就會產生SwiftData內的User資料,即使下次重開App時,也會讀取資料,然後顯示出來,產生一個永久的儲存狀態了。
從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始 Day19 [完]