蘋果推出 SwiftData,可替代 SwiftUI 的 Core Data
作者 | Sergio De Simone
譯者 | 馬可薇
策劃 | Tina
蘋果于 WWDC 2023 上推出新框架 SwiftData,提供聲明性的、以 Swift 為先的 API,可在 iOS 應用中進行數據持久化工作。SwiftData 可輕松將一個 Swift 類轉換為一個持久化模型,非常適合同 SwiftUI 一并使用。
在幾年前通過 SwiftUI 改變了 UI 在其平臺上的定義方式后,蘋果正在邁出超越 Core Data 的第一步,即一個基于 ORM、嚴格綁定于 Objective-C 動態能力的持久化框架。
雖然 SwiftUI 所提供的 API 讓持久化模型的定義成為可能,但這種方式卻頗為繁瑣。Core Data 通常是在 Xcode 內集成的 Schema Model 編輯器上使用,由此生成的 .xcdatamodeld 是真實之源,可被用于自動生成存根(stub)。存根所提供的基類則被用作實際模型的基類。
SwiftData 的方式則完全相反,它是將代碼看作是真實之源,并以此定義一個簡單的模型:
@Model
classRecipe {
@Attribute(.unique) varname: String
varsummary: String?
varingredients: [Ingredient]
仔細看能發現 SwiftData 是如何依賴 Swift 5.9 中新引入的宏功能。簡而言之,@Model 宏會將 @PersistedProperty 應用于 Recipe 類的所有屬性,并在類的實現中添加初始化代碼和其他的必要屬性。
由于這層額外的邏輯對開發者而言完全透明,SwiftData 得以將所有屬性映射至其底層存儲。據蘋果公司稱,持久性對象會在需要時從持久化存儲中獲取并更新。
Bool、Int、String 等簡單類型支持開箱可用,但更為復雜的類型則必須要符合 Codable 協議,才能于持久化類中使用。
如上文所述,SwiftData 與 SwiftUI 的相性很好。而事實上,@Model 宏也會讓類在符合 ObservableObject 協議的同時,讓所有持久化的屬性表現為 @Published 屬性的形式。此外,將 SwiftUI 視圖接入持久化模型只需使用一個新的 @Query 屬性。與 @State 和 @Binding 的使用方式相類似,每次底層數據發生變化時,@Query 可確保視圖的自動重新渲染。
SwiftData 中還提供對謂詞(Predicate)定義的支持,可用于過濾數據。編譯時對謂詞進行檢查,并對類型不匹配的問題報編譯錯誤。此外,SwiftData 模型也可通過 CloudKit 或以 iCloud 云盤中存儲的文件形式進行跨設備同步。
為讓開發者能更為輕松地遷移至 SwiftData,該框架支持在現有 Core Data 應用中的逐步采用,在蘋果提供的演示項目中展示了如何在一個 Core Data 應用中僅部分使用 SwiftData。
最后值得留意的是,SwiftData 并不是換了皮的 Core Data。正如蘋果于 WWDC 中所演示的,SwiftData 是借助了同 Core Data 一樣的持久化引擎,但卻是一個完全獨立的堆棧。
原文鏈接:
021yin.com/news/2023/0*/swiftdata-persistent-framework/)
十七年來奇葩大崩潰!為不讓OpenAI和谷歌白拿數據,Reddit 收取巨額API 費用還誹謗開發者,社區爆發大規模抗議
“偷”代碼建起公司、學歷造假、*天拿下1億美元卻拖欠工資,這位AI獨角獸CEO屢遭質疑后親自回應了
市值暴漲10519%,原來全世界搞大模型的企業都在給這位華人打工!
吉印通推出生成式AI代碼助手,覆蓋 30 種編程語言;高考生喊話馬化騰,騰訊回應;機房宕機損失過億,唯品會負責人被免職 | Q資訊