0Pricing
Swift Academy · درس

‏PassthroughSubject وCurrentValueSubject

استخدموا Subjects كجسور بين الشيفرة命命ية وخطوط معالجة Combine.

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

مرحبًا

تُعد Subjects ناشرات ومشتركين في الوقت نفسه. وهي تصل التعليمات البرمجية الإجرائية بخطوط معالجة Combine التفاعلية.

PassthroughSubject

```swift let subject = PassthroughSubject() subject.sink { print($0) }.store(in: &cancellables) subject.send("Hello") subject.send("World") // Hello, World ``` لا تصل القيم المُرسلة سابقًا إلى المشتركين المتأخرين.

CurrentValueSubject

```swift let subject = CurrentValueSubject(0) subject.sink { print($0) }.store(in: &cancellables) // prints 0 immediately subject.value = 1 // prints 1 subject.value = 2 // prints 2 ``` يخزّن القيمة الحالية ويعيد إصدارها للمشتركين الجدد.

PassthroughSubject مقابل CurrentValueSubject

• `PassthroughSubject` — لا يخزّن قيمة؛ ولا يرى المشتركين المتأخرين شيئًا • `CurrentValueSubject` — يخزّن أحدث قيمة؛ ويحصل عليها المشتركين المتأخرين فورًا

إرسال الاكتمال

```swift subject.send(completion: .finished) // or: subject.send(completion: .failure(MyError.bad)) ``` بعد الاكتمال، لا يمكن إرسال مزيد من القيم.

استخدامه باعتباره Publisher

```swift let events: AnyPublisher = subject.eraseToAnyPublisher() // Expose only the Publisher interface, hide Subject ```

الربط من Delegate

```swift class LocationManager: NSObject, CLLocationManagerDelegate { let locationSubject = PassthroughSubject() func locationManager(_ m: CLLocationManager, didUpdateLocations l: [CLLocation]) { locationSubject.send(l.last!) } } ```

أمان الخيوط

لا تكون Subjects آمنة للاستخدام من عدة خيوط افتراضيًا. أرسل القيم من خيط متسق، أو استخدم `receive(on:)` للتبديل.

الاختبار باستخدام Subjects

```swift func testSearch() { let subject = PassthroughSubject() var results: [String] = [] subject.sink { results.append($0) }.store(in: &cancellables) subject.send("swift"); subject.send("ios") XCTAssertEqual(results, ["swift","ios"]) } ```

Combine في MVVM

```swift class SearchViewModel: ObservableObject { let querySubject = CurrentValueSubject("") @Published var results: [String] = [] init() { querySubject .debounce(for: 0.3, scheduler: RunLoop.main) .flatMap { search($0) } .assign(to: &$results) } } ```

تحقق سريع

أي Subject يعيد إصدار قيمته الحالية للمشتركين الجدد؟

مراجعة

أهم النقاط: • `PassthroughSubject` — لا يخزّن قيمة ولا يعيد إصدارها • `CurrentValueSubject` — يخزّن القيمة ويعيد إصدارها للمشتركين المتأخرين • ينهي `send(completion:)` التدفق • يخفي `eraseToAnyPublisher()` واجهة Subject • تصل Subjects بين التعليمات البرمجية الإجرائية والتفاعلية التالي: Networking with Combine.

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

هل درس «‏PassthroughSubject وCurrentValueSubject» مجاني؟

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

ماذا ستتعلم في «‏PassthroughSubject وCurrentValueSubject»؟

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

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

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

كم من الوقت يستغرق درس «‏PassthroughSubject وCurrentValueSubject»؟

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

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

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

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

  1. الناشرون والمشتركون
  2. المعاملات: ‏map وfilter وcombineLatest
  3. ‏PassthroughSubject وCurrentValueSubject
  4. الشبكات باستخدام Combine وURLSession
← العودة إلى Swift Academy