0Pricing
Swift Academy · درس

‏@Published والمراقبة في Combine

تعرّفوا إلى كيفية عمل @Published داخليًا لإصدار التغييرات عبر ناشري Combine.

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

مرحبًا

`@Published` هو مغلف خصائص من إطار Combine يُصدر قيمة جديدة عبر ناشر كلما تغيّرت الخاصية.

أساسيات @Published

```swift import Combine class Counter: ObservableObject { @Published var count = 0 } let c = Counter() let cancel = c.$count.sink { print("Count: \($0)") } c.count += 1 // "Count: 1" c.count += 1 // "Count: 2" ```

بروتوكول ObservableObject

```swift class ViewModel: ObservableObject { @Published var title = "Initial" @Published var items: [String] = [] } ``` تحصل أي فئة تتوافق مع `ObservableObject` تلقائيًا على ناشر `objectWillChange`.

ناشر objectWillChange

```swift class VM: ObservableObject { @Published var name = "" } let vm = VM() let cancel = vm.objectWillChange.sink { print("Will change") } vm.name = "Alice" // "Will change" printed before assignment ```

@Published مع SwiftUI @StateObject

```swift @StateObject var vm = ViewModel() // In View body: Text(vm.title) // Re-renders when vm.title changes ``` يمتلك `@StateObject` نموذج العرض، بينما يراقب `@ObservedObject` نموذجًا مملوكًا من جهة خارجية.

ربط الناشرين من @Published

```swift class Search: ObservableObject { @Published var query = "" @Published var results: [String] = [] private var cancellables = Set() init() { $query .debounce(for: 0.3, scheduler: RunLoop.main) .sink { [weak self] q in self?.search(q) } .store(in: &cancellables) } } ```

يُصدر @Published القيمة قبل الإسناد

يُصدر `objectWillChange` إشعارًا *قبل* تخزين القيمة الجديدة: ```swift vm.objectWillChange.sink { _ in print("will change") } $count.sink { n in print("is \(n)") } // Order: "will change" then "is 1" ```

تخزين الاشتراكات

```swift var cancellables = Set() c.$count .sink { print("\($0)") } .store(in: &cancellables) // cancellables keeps subscription alive ```

قيود @Published

• يقتصر على الفئات (الأنواع المرجعية) • لا يمكن استخدامه مع ثوابت `let` • لا يعمل عبر حدود actor من دون عزل صريح • تُصدر القيمة قبل اكتمال الإسناد (دلالات `willSet`)

ماكرو Observation ‏(Swift 5.9+)

يقدم Swift 5.9 ‏`@Observable` بوصفه بديلًا أبسط: ```swift @Observable class Counter { var count = 0 } // No Combine import needed; SwiftUI auto-subscribes ```

تحقق سريع

متى يُصدر `@Published` قيمته — قبل تعيين الخاصية أم بعده؟

مراجعة

أهم النقاط: • تعرض `@Published var x` القيمة `$x` بوصفها `Publisher` • يحصل `ObservableObject` تلقائيًا على ناشر `objectWillChange` • يُصدر القيمة قبل تخزين القيمة الجديدة (دلالات `willSet`) • خزّن الاشتراكات في `Set` • في Swift 5.9: يلبي `@Observable` معظم احتياجات `@Published` التالي: تركيب مغلفات الخصائص.

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

هل درس «‏@Published والمراقبة في Combine» مجاني؟

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

ماذا ستتعلم في «‏@Published والمراقبة في Combine»؟

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

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

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

كم من الوقت يستغرق درس «‏@Published والمراقبة في Combine»؟

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

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

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

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

  1. إنشاء غلاف خصائص مخصّص
  2. القيم المُسقطة باستخدام $binding
  3. ‏@Published والمراقبة في Combine
  4. تركيب أغلفة خصائص متعددة
← العودة إلى Swift Academy