第 18 章
運用資料庫與 SwiftData
Learn not to add too many features right away, and get the core idea built and tested.
– Leah Culver
恭喜你達到這一里程碑 !到目前為止,你已經成功開發一個基本的 App 來讓使用者列出他們最愛的餐廳。至此,所有的餐廳都已在原始碼中預先定義,並儲存在陣列中。如果你要新增餐廳,最簡單的方式是將其加到現有的 restaurants 陣列中。
但是,如果你採用此方式,新餐廳資料將不會永久儲存,儲存在記憶體(如陣列)的資料是短暫的,一旦你離開App,所有的變更都將遺失,因此我們需要決定一種持久性儲存資料的方式。
要實現永久資料儲存,我們需要將資料儲存在檔案或資料庫等持久性儲存器( Persistent Storage ),例如:透過將資料儲存到資料庫,則即使 App 閃退或當機,資料也將保持安全。另一方面,檔案更適合儲存不需要頻繁修改的少量資料,其通常用於儲存 App 的設定,如 Info.plist 檔。
FoodPin App 可能需要儲存數千筆餐廳紀錄,使用者經常會增加或刪除紀錄,在這種情況下,資料庫是管理大型資料集的合適解決方案。在本章中,我將引導你了解 SwiftData 框架,並示範如何利用它來處理資料庫操作,我們會討論使用 SwiftData 框架建立資料模型和執行 CRUD(建立、讀取、更新與刪除)等主題。
你將對現有的 FoodPin 專案進行大量的更改,但是在完成本章之後,你的 App 將可讓使用者永久儲存他們最喜愛的餐廳。
何謂 SwiftData
首先,必須注意的是 SwiftData 框架不應該與資料庫混淆。SwiftData 建立在 Core Data 之上,實際上是一個框架,旨在幫助開發者管理持久性儲存器上的資料,並與之互動。雖然 iOS 的預設持久性儲存器通常是SQLite 資料庫,但值得注意的是持久性儲存器也可以採用其他形式,例如:Core Data 還可以用於管理本機檔案中的資料(如XML 檔案)。
無論你使用的是 Core Data 還是 SwiftData 框架,這兩種工具都可以保護開發者避免受到底層持久儲存的複雜性的影響。以 SQLite 資料庫為例,使用 SwiftData,則無須擔心連接到資料庫或理解 SQL 才能取得資料紀錄;相反的,開發者可以專注於使用 API 和 Swift 巨集(如 @Query 和 @Model),來有效管理 App 中的資料。
iOS 17 中新導入了 SwiftData 框架,以取代之前的 Core Data 框架。自 Objective-C 時代以來,Core Data 一直是 iOS 開發的資料管理 API,儘管開發者可以將該框架整合到 Swift 專案中,但是 Core Data 並非 Swift 和 SwiftUI 的原生解決方案。
在 iOS 17 中,Apple 終於為 Swift 導入了一個名為「SwiftData」的原生框架,用於持久性資料管理和資料模型建立。它建立在 Core Data 之上,但是 API 完全重新設計,以最大化利用 Swift。
本文摘自《iOS 17 App程式設計實戰心法》(SwiftUI)》一書。如果你想更深入學習Swift程式設計和下載完整程式碼,你可以從 AppCoda網站 購買完整電子版。