RxSwift لـ Swift: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو RxSwift ولماذا هو مطلوب؟

\n\n

RxSwift هو التطبيق الرسمي لـ ReactiveX (Reactive Extensions) للغة Swift. ReactiveX هي مكتبة للبرمجة غير المتزامنة ومعالجة تدفقات البيانات باستخدام التسلسلات القابلة للملاحظة (Observable) والعوامل (Operators). يتيح RxSwift كتابة كود نظيف وتصريحي وسهل القراءة لمعالجة الأحداث والعمليات غير المتزامنة (طلبات الشبكة، العمل مع واجهة المستخدم، المؤقتات) وإدارة حالة التطبيق.

\n\n

لماذا نحتاج RxSwift؟

\n
    \n
  • تبسيط الكود غير المتزامن: بدلاً من الإغلاقات المتداخلة (callback hell) والمفوضين، يقدم RxSwift واجهة موحدة للعمل مع أي مصادر بيانات غير متزامنة.
  • \n
  • التصريحية: تصف ماذا يجب أن يحدث للبيانات، وليس كيف يتم تنفيذ ذلك. يصبح الكود أكثر قابلية للتنبؤ.
  • \n
  • إدارة الخيوط (Threading): سهولة التبديل بين الخيوط الخلفية والخيط الرئيسي باستخدام عاملي observeOn و subscribeOn.
  • \n
  • التركيب: يمكنك دمج وتصفية وتحويل وضم عدة تدفقات بيانات في تدفق واحد.
  • \n
  • إدارة الذاكرة: الآليات المدمجة (DisposeBag) تلغي الاشتراكات تلقائياً عند تدمير الكائنات، مما يمنع تسرب الذاكرة.
  • \n
\n\n

RxSwift ليست مجرد مكتبة، بل هي نموذج برمجي مفيد بشكل خاص في تطبيقات iOS المعقدة التي تحتوي على العديد من التفاعلات والحالات.

\n\n

تثبيت RxSwift

\n\n

يتم تثبيت RxSwift عبر CocoaPods أو Swift Package Manager (SPM). التثبيت عبر pip أو npm غير قابل للتطبيق، لأنها مكتبة أصلية لنظام Apple البيئي.

\n\n

التثبيت عبر CocoaPods

\n

أضف إلى ملف Podfile الخاص بك:

\n
platform :ios, '13.0'\nuse_frameworks!\n\ntarget 'YourAppTarget' do\n  pod 'RxSwift', '~> 6.0'\n  pod 'RxCocoa', '~> 6.0'  # للتكامل مع UIKit/AppKit\nend
\n

ثم نفذ الأمر في الطرفية:

\n
pod install
\n\n

التثبيت عبر Swift Package Manager (SPM)

\n

في Xcode: File → Add Packages... وألصق رابط المستودع:

\n
https://github.com/ReactiveX/RxSwift.git
\n

اختر الإصدار المطلوب (مثلاً 6.5.0) وأضف الحزمة RxSwift و RxCocoa إلى هدفك.

\n\n

بداية سريعة مع مثال كود

\n\n

أنشئ Observable بسيط يصدر أرقاماً من 1 إلى 5، واشترك فيه:

\n\n
import RxSwift\n\nlet disposeBag = DisposeBag()\n\n// 1. إنشاء Observable\nlet observable = Observable<Int>.create { observer in\n    observer.onNext(1)\n    observer.onNext(2)\n    observer.onNext(3)\n    observer.onNext(4)\n    observer.onNext(5)\n    observer.onCompleted()\n    return Disposables.create()\n}\n\n// 2. الاشتراك\nobservable\n    .subscribe(\n        onNext: { value in\n            print("تم استلام القيمة: \\(value)")\n        },\n        onError: { error in\n            print("خطأ: \\(error.localizedDescription)")\n        },\n        onCompleted: {\n            print("اكتمل التسلسل")\n        },\n        onDisposed: {\n            print("تم تدمير الاشتراك")\n        }\n    )\n    .disposed(by: disposeBag)\n\n// الإخراج:\n// تم استلام القيمة: 1\n// تم استلام القيمة: 2\n// تم استلام القيمة: 3\n// تم استلام القيمة: 4\n// تم استلام القيمة: 5\n// اكتمل التسلسل\n// تم تدمير الاشتراك
\n\n

الشرح:

\n
    \n
  • Observable.create — ينشئ تسلسلاً مخصصاً.
  • \n
  • observer.onNext — يصدر قيمة جديدة.
  • \n
  • observer.onCompleted — يشير إلى اكتمال التسلسل.
  • \n
  • s

توصيات