Swift Data: Apple का Swift के लिए नया ORM
1. यह क्या है और क्यों ज़रूरी है?
Swift Data एक आधुनिक, हल्का ORM (Object-Relational Mapping) फ्रेमवर्क है, जिसे Apple ने WWDC 2023 में पेश किया। यह Swift ऐप्स में डेटा स्टोर करने के लिए बनाया गया है और iOS 17+, macOS 14+, tvOS 17+ और watchOS 10+ को सपोर्ट करता है। Swift Data पुराने Core Data की जगह लेता है और डेटाबेस मैनेजमेंट को आसान, डिक्लेरेटिव और टाइप-सेफ बनाता है।
Swift Data क्यों ज़रूरी है? इसका मुख्य कारण कोड को बहुत सरल बनाना है। NSManagedObject बनाने, कॉन्टेक्स्ट सेट करने और जटिल क्वेरी लिखने की बजाय, डेवलपर सिर्फ Swift क्लासेज़ और मैक्रोज़ (@Model, @Attribute, @Relationship) का उपयोग करके डेटा मॉडल बनाता है। Swift Data अपने आप टेबल बनाने, चेंजेस मैनेज करने और SwiftUI के साथ UI को अपडेट करने का काम करता है।
सबसे बड़ा फायदा SwiftUI के साथ गहरा इंटीग्रेशन है। डेटा में बदलाव होते ही UI अपने आप अपडेट हो जाता है, बिना objectWillChange.send() कॉल किए या लिस्ट रीलोड किए। यह Swift Data को SwiftUI प्रोजेक्ट्स के लिए आदर्श बनाता है, जहाँ लोकल डेटा स्टोर करना हो (जैसे टास्क लिस्ट, नोट्स, सेटिंग्स, कैश)।
2. इंस्टॉलेशन
Swift Data Apple की स्टैंडर्ड लाइब्रेरी का हिस्सा है, जो iOS 17 और macOS 14 से शुरू होता है। इसे अलग से इंस्टॉल करने की ज़रूरत नहीं है (pip, npm, या cargo से)। बस Swift फाइल में फ्रेमवर्क इम्पोर्ट करें।
ज़रूरी: आपके प्रोजेक्ट का Deployment Target iOS 17.0 या macOS 14.0 होना चाहिए।
Xcode में प्रोजेक्ट में जोड़ने का तरीका:
// Swift Data को इंस्टॉल करने की ज़रूरत नहीं। बस इम्पोर्ट करें:
import SwiftData
अगर आप Swift Package Manager (SPM) का उपयोग करते हैं, तो Swift Data को अलग पैकेज के रूप में न जोड़ें — यह SDK में पहले से मौजूद है।
3. त्वरित शुरुआत — एक छोटा काम का उदाहरण
चलिए एक सरल To-Do ऐप बनाते हैं।
import SwiftUI
import SwiftData
// 1. डेटा मॉडल बनाएं
@Model
final class TaskItem {
var title: String
var isCompleted: Bool
var createdAt: Date
init(title: String, isCompleted: Bool = false) {
self.title = title
self.isCompleted = isCompleted
self.createdAt = Date()
}
}
// 2. App में कंटेनर सेट करें
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: TaskItem.self) // अपने आप कंटेनर बनाता है
}
}
// 3. View में डेटा का उपयोग करें
struct ContentView: View {
@Environment(\.modelContext) private var context
@Query private var tasks: [TaskItem]
var body: some View {
NavigationStack {
List {
ForEach(tasks) { task in
HStack {
Text(task.title)
Spacer()
if task.isCompleted {
Image(systemName: "checkmark")
}
}
}
.onDelete(perform: deleteTasks)
}
.navigationTitle("कार्य")
.toolbar {
ToolbarItem {
Button("जोड़ें") {
let newTask = TaskItem(title: "नया कार्य \(tasks.count + 1)")
context.in