Swift Data 初略筆記
2 min

今天用 Xcode 15 來建立新專案時,發現儲存的地方變為可選的方式,裡面除了原有的 CoreData 外也提供了 SwiftData 的選項,就來研究了一下。

原來這是 iOS 17 新推出的功能,看起來主要是針對 Swift UI來設計,底層一樣是運用 CoreData ,依靠 Swift macro 來運作。
@Model
這是一個新的 macro ,主要用來定義模型的架構,架構上使用的就是一般的 Swift 架構,但若有特殊需求可以賦予屬性來進行註記。
import SwiftData
@Model
class Trip {
var name: String
var destination: String
var endDate: Date
var startDate: Date
var bucketList: [BucketListItem]? = []
var livingAccommodation: LivingAccommodation?
}@Attribute
剛才說如有特殊需求可以賦予屬性,@Attribute 就是用來這樣做的 macro,例如我希望上面的 name 變數是唯一的,就可以這樣
- var name: String
+ @Attribute(.unique) var name: StringSwiftUI 結合
在 Swift 中可以將 SwiftData 傳入
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: Trip.self)
}在 View 中使用
@Environment(\.modelContext) private var modelContext新增刪除可以透過
private func addItem() {
let newItem = Trip(...)
modelContext.insert(newItem)
}
private func deleteItems(offsets: IndexSet) {
for index in offsets {
modelContext.delete(items[index])
}
}目前還沒有要用到,先初略的看到這裡,還有一些更深入的應用,例如永久儲存、與網路資料同步等,先知道大概的運作方式,老實說這個東西跟微軟的 Entity Framework 很像,EF 框架只要寫個 Class 定義好 primary key、foreign key、欄位屬性等等,透過 migration 就可以把關聯式資料庫建起來。
參考資料
SwiftData - Xcode - Apple Developer
Adopting SwiftData for a Core Data app | Apple Developer Documentation
Meet SwiftData - WWDC23 - Videos - Apple Developer
SwiftData — Get rid of the complexity of CoreData
Comments
Loading comments...