0Pricing
Swift Academy · درس

‏SwiftData @Model وModelContext

عرّفوا النماذج باستخدام ماكرو @Model ونفّذوا عمليات CRUD عبر ModelContext.

‏SwiftData @Model وModelContext درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

مقدمة إلى SwiftData

إن SwiftData (في iOS 17 والإصدارات الأحدث) هو إطار عمل حديث للاستمرارية أصلي في Swift من Apple، ومبني داخليًا على Core Data.

import SwiftData
// Main concepts: @Model, ModelContainer, ModelContext

ماكرو @Model

ضعوا التعليمة التوضيحية @Model على فئة لجعلها نموذج SwiftData قابلًا للاستمرارية. وتتحول الخصائص تلقائيًا إلى سمات مخزنة.

@Model
class Item {
  var name: String
  var createdAt: Date
  init(name: String) {
    self.name = name
    self.createdAt = Date()
  }
}

إعداد ModelContainer

أنشئوا ModelContainer باستخدام أنواع النماذج الخاصة بكم، ثم احقنوه في بيئة SwiftUI.

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup {
      ContentView()
    }
    .modelContainer(for: Item.self)
  }
}

ModelContext في العروض

استخدموا @Environment(\.modelContext) للوصول إلى سياق النموذج داخل عرض SwiftUI.

struct AddItemView: View {
  @Environment(\.modelContext) private var context
  func addItem() {
    context.insert(Item(name: "New Item"))
  }
}

الإدراج والحذف

استدعوا context.insert لإضافة النماذج وcontext.delete لإزالتها. تُحفظ التغييرات تلقائيًا افتراضيًا.

let item = Item(name: "Coffee")
context.insert(item)   // add
context.delete(item)   // remove
// Auto-saved on next run loop

@Query لجلب البيانات

يجلب @Query في عروض SwiftUI البيانات تلقائيًا ويحدّث العرض عند تغيّر البيانات الأساسية.

struct ItemList: View {
  @Query(sort: \Item.createdAt, order: .reverse) var items: [Item]
  var body: some View {
    List(items) { item in Text(item.name) }
  }
}

التصفية باستخدام Predicates

مرّروا #Predicate إلى @Query لتصفية النتائج بطريقة وصفية.

@Query(filter: #Predicate<Item> { $0.name.contains("Swift") })
var swiftItems: [Item]

الحفظ اليدوي

استدعوا try context.save() عندما تحتاجون إلى تحكم صريح في توقيت حفظ التغييرات.

do {
  try context.save()
} catch {
  print("Save error: \(error)")
}

@Attribute للتخصيص

استخدموا @Attribute مع الخصائص لتخصيص سلوك الاستمرارية، مثل التفرد والتخزين الخارجي.

@Model
class User {
  @Attribute(.unique) var email: String
  @Attribute(.externalStorage) var avatar: Data?
  init(email: String) { self.email = email }
}

الخصائص @Transient

ضعوا @Transient على الخصائص لاستبعادها من الاستمرارية.

@Model
class Session {
  var token: String
  @Transient var isExpired: Bool = false
  init(token: String) { self.token = token }
}

تهيئة ModelContainer

هيّئوا الحاوية باستخدام مخطط صريح وخطة ترحيل للنماذج ذات الإصدارات.

let schema = Schema([Item.self, User.self])
let config = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
let container = try ModelContainer(for: schema, configurations: config)

تحقق سريع

أي غلاف خصائص في SwiftUI يجلب نماذج SwiftData تلقائيًا ويحدّث العرض عند تغيّر البيانات؟

مراجعة الدرس

ضعوا التعليمة التوضيحية @Model على الفئات لجعلها قابلة للاستمرارية. أعدّوا ModelContainer على مستوى التطبيق. اقرأوا البيانات واكتبوها عبر @Environment(\.modelContext). نفّذوا الجلب التفاعلي باستخدام @Query، وطبّقوا التصفية باستخدام #Predicate.

الأسئلة الشائعة

هل درس «‏SwiftData @Model وModelContext» مجاني؟

نعم — نص درس «‏SwiftData @Model وModelContext» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏SwiftData @Model وModelContext»؟

عرّفوا النماذج باستخدام ماكرو @Model ونفّذوا عمليات CRUD عبر ModelContext. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «‏SwiftData @Model وModelContext»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مكدس Core Data: إعداد NSPersistentContainer
  2. ‏SwiftData @Model وModelContext
  3. العلاقات وواصفات الجلب
  4. الترحيلات الخفيفة والمزامنة مع CloudKit
← العودة إلى Swift Academy