ربط Combine بـ SwiftUI
مرّر مخرجات الناشر إلى حالة قابلة للمراقبة
ربط Combine بـ SwiftUI درس مجاني في SwiftUI Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SwiftUI Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SwiftUI Academy 4 دروس في المجموع.
عالمان يجب ربطهما
ينتج Combine تدفقًا من القيم بمرور الوقت، بينما تعيد SwiftUI الرسم انطلاقًا من الحالة. ويعني الربط بينهما تمرير ذلك التدفق إلى الحالة.
الحالة تحرك واجهة المستخدم
لا تعيد SwiftUI الرسم إلا عندما تتغير خاصية تتم مراقبتها، لذلك يجب أن يكتب الناشر في النهاية في مثل هذه الخاصية لتحديث الشاشة.
الإسناد إلى خاصية
يكتب مشترك assign كل قيمة مباشرةً في خاصية باستخدام key path، من دون الحاجة إلى closure.
publisher
.assign(to: &model.$results)النماذج القابلة للمراقبة تحتفظ بالحالة
ضعوا الخصائص المنشورة في فئة نموذج @Observable، ثم دعوا Combine يحدّثها عند وصول القيم.
@Observable
class SearchModel {
var results: [String] = []
}خزّنوا كائنات Cancellable
حافظوا على بقاء الاشتراكات بتخزين كل cancellable في مجموعة تعيش طوال مدة بقاء النموذج.
private var bag = Set<AnyCancellable>()استخدموا sink ثم حدّثوا
داخل sink، أسندوا القيمة المتلقاة إلى خاصية حالة، وستعيد SwiftUI الرسم في حلقة التشغيل التالية.
pub.sink { [weak self] value in
self?.results = value
}.store(in: &bag)ابقوا في الخيط الرئيسي
يجب أن تحدث تحديثات واجهة المستخدم في الخيط الرئيسي، لذا استخدموا receive(on:) قبل تسليم القيم إلى الحالة.
.receive(on: RunLoop.main)التحكم من TextField
اربطوا TextField بخاصية في النموذج، ثم انشروا تغييراتها كي يتمكن مسار Combine من التفاعل مع الكتابة.
TextField("Search", text: $model.query)تجنبوا دورات الاحتفاظ
التقطوا self بطريقة ضعيفة داخل closures الخاصة بـsink حتى لا يُبقي النموذج اشتراكه الخاص حيًا.
sink { [weak self] v in self?.value = v }Combine مع async/await
غالبًا ما تجمع الشفرة الحديثة بين Combine لمعالجة الإدخال وasync/await لاستدعاء الشبكة داخل المسار.
جسر واضح
النمط ثابت: من publisher إلى operators ثم إلى sink أو assign، بحيث تستقر القيم في حالة قابلة للمراقبة. 🌉
تحقق سريع
مررتم ناشر Combine إلى نموذج @Observable من خيط في الخلفية. وأصبحت واجهة المستخدم تومض بطريقة غريبة. ما الحل؟
مراجعة: من التدفق إلى الشاشة
ربطتم Combine بـSwiftUI: مرروا القيم عبر operators، وانتقلوا إلى الخيط الرئيسي، ثم ضعوها في حالة قابلة للمراقبة. 🎉
تعلم Swift مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «ربط Combine بـ SwiftUI» مجاني؟
نعم — نص درس «ربط Combine بـ SwiftUI» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SwiftUI Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SwiftUI Academy 4 دروس في المجموع.
ماذا ستتعلم في «ربط Combine بـ SwiftUI»؟
مرّر مخرجات الناشر إلى حالة قابلة للمراقبة تتمرن على SwiftUI Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SwiftUI Academy؟
لا تُشترط خبرة سابقة. SwiftUI Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «ربط Combine بـ SwiftUI»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SwiftUI Academy هذا؟
نعم. كل درس في SwiftUI Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الناشرون والمشتركون
- التحويل باستخدام map وfilter
- Debounce للبحث المباشر
- ربط Combine بـ SwiftUI