Swift Data 初略筆記

2 min
Swift Data 初略筆記
Swift Data 初略筆記

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

Storage 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

Adopting SwiftData for a Core Data app | Apple Developer Documentation

Meet SwiftData - WWDC23 - Videos - Apple Developer

SwiftData — Get rid of the complexity of CoreData

SwiftData in SwiftUI (Part 1)

Comments

Loading comments...