, ,

Swift Data 初略筆記

建立專案時,看到 Swift Data 這玩意,雖然目前的專案可能還用不到,也有可能用到,就先初略的記錄一下這東西。

Swift Data 初略筆記

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

Storage 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: String
更換第一行為第二行

SwiftUI 結合

在 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
SwiftData makes it easy to persist data using declarative code. You can query and filter data using regular Swift code. And it’s designed to integrate seamlessly with SwiftUI.
SwiftData Documentation (1)
Adopting SwiftData for a Core Data app | Apple Developer Documentation
Persist data in your app intuitively with the Swift native persistence framework.
SwiftData Documentation (2)
Meet SwiftData - WWDC23 - Videos - Apple Developer
SwiftData is a powerful and expressive persistence framework built for Swift. We’ll show you how you can model your data directly from…
WWDC 2023 SwiftData
SwiftData — Get rid of the complexity of CoreData
Declarative code integration with persistent data has been made easy with the help of SwiftData.
這裡有其他屬性的介紹
SwiftData in SwiftUI (Part 1)
WWDC 2023