0Pricing
Swift Academy · درس

‏@ObservableObject و@StateObject

أنشئوا نماذج من نوع مرجعي تقود عروض SwiftUI عبر @Published.

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

مرحبًا

بالنسبة إلى الحالة المعقدة المشتركة بين عروض متعددة، استخدم نماذج من نوع مرجعي ملتزمة بـ `ObservableObject`، وامتلكها باستخدام `@StateObject` أو راقبها باستخدام `@ObservedObject`.

تعريف ObservableObject

```swift class CartModel: ObservableObject { @Published var items: [CartItem] = [] @Published var total: Double = 0 func add(_ item: CartItem) { items.append(item) } } ```

@StateObject — الملكية

```swift struct ShopView: View { @StateObject private var cart = CartModel() // owns the model var body: some View { CartList(cart: cart) } } ``` استخدم `@StateObject` عندما ينشئ العرض النموذج ويمتلكه.

@ObservedObject — ملكية خارجية

```swift struct CartList: View { @ObservedObject var cart: CartModel // doesn't own; passed in var body: some View { List(cart.items) { item in Text(item.name) } } } ```

الفرق

• `@StateObject` — ينشئ العرض النموذج؛ ويستمر النموذج عبر عمليات إعادة التصيير • `@ObservedObject` — يُمرَّر النموذج إلى العرض؛ ويمكن للعنصر الأب إعادة إنشائه يؤدي استخدام `@ObservedObject` عندما تكون الحاجة إلى `@StateObject` إلى إعادة ضبط النموذج بشكل غير متوقع.

الاشتراك في objectWillChange

تشترك SwiftUI تلقائيًا في `objectWillChange` عند استخدام `@StateObject` أو `@ObservedObject`. يؤدي كل تغيير في `@Published` إلى إعادة التصيير.

objectWillChange يدويًا

```swift class Timer: ObservableObject { var count = 0 func tick() { objectWillChange.send() // manual notification count += 1 } } ```

ObservableObjects متداخلة

لا تراقب SwiftUI عناصر ObservableObjects المتداخلة تلقائيًا. مرّر التغييرات يدويًا: ```swift class Parent: ObservableObject { @Published var child = ChildModel() private var cancel: AnyCancellable? init() { cancel = child.objectWillChange.sink { [weak self] _ in self?.objectWillChange.send() } } } ```

ماكرو @Observable (Swift 5.9)

```swift @Observable class Counter { var count = 0 } // No ObservableObject, no @Published, no @StateObject needed // SwiftUI automatically tracks access ```

اختبار ObservableObject

```swift func testCart() { let cart = CartModel() cart.add(CartItem(name:"Apple",price:1.0)) XCTAssertEqual(cart.items.count, 1) XCTAssertEqual(cart.total, 1.0) } ```

تحقق سريع

متى ينبغي استخدام `@StateObject` بدلًا من `@ObservedObject`؟

مراجعة

أهم النقاط: • `ObservableObject` مع `@Published` = نموذج تفاعلي • `@StateObject` — العرض يمتلك النموذج؛ ويستمر عبر عمليات إعادة التصيير • `@ObservedObject` — يُمرَّر النموذج إلى العرض؛ والملكية خارجية • استخدم `objectWillChange.send()` للإشعارات اليدوية • يحل ماكرو `@Observable` في Swift 5.9 محل معظم هذا الأسلوب التالي: @EnvironmentObject.

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

هل درس «‏@ObservableObject و@StateObject» مجاني؟

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

ماذا ستتعلم في «‏@ObservableObject و@StateObject»؟

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

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

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

كم من الوقت يستغرق درس «‏@ObservableObject و@StateObject»؟

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

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

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

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

  1. ‏@Binding: تدفق البيانات ثنائي الاتجاه
  2. ‏@ObservableObject و@StateObject
  3. ‏@EnvironmentObject للحالة المشتركة
  4. المصدر الوحيد للحقيقة والتدفق أحادي الاتجاه
← العودة إلى Swift Academy