0Pricing
Swift Academy · درس

تركيب أغلفة خصائص متعددة

رتّبوا أغلفة الخصائص فوق بعضها وافهموا ترتيب تهيئتها.

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

مرحبًا

يمكن تطبيق عدة مغلفات خصائص على خاصية واحدة. ويهم الترتيب — إذ تغلف المغلفات الخارجية المغلفات الداخلية — كما يتبع ترتيب التهيئة ترتيب التصريح.

تكديس المغلّفات

```swift @propertyWrapper struct A { var wrappedValue: Int { didSet { print("A") } } init(wrappedValue: Int) { self.wrappedValue = wrappedValue } } @propertyWrapper struct B { var wrappedValue: Int { didSet { print("B") } } init(wrappedValue: Int) { self.wrappedValue = wrappedValue } } struct S { @A @B var x = 0 } ```

الغلاف الخارجي يغلّف الداخلي

عند كتابة `@A @B var x`، تكون إعادة الصياغة كما يلي: ```swift var _x: A> = A(wrappedValue: B(wrappedValue: 0)) ``` يغلّف A، ‏B الذي يغلّف Int.

مثال عملي: @NonEmpty + @Trimmed

```swift @propertyWrapper struct Trimmed { var wrappedValue: String { didSet { wrappedValue = wrappedValue.trimmingCharacters(in:.whitespaces) } } init(wrappedValue: String) { self.wrappedValue = wrappedValue.trimmingCharacters(in:.whitespaces) } } @propertyWrapper struct NonEmpty { var wrappedValue: String { didSet { if wrappedValue.isEmpty { wrappedValue = "(empty)" } } } init(wrappedValue: String) { self.wrappedValue = wrappedValue.isEmpty ? "(empty)" : wrappedValue } } struct Form { @NonEmpty @Trimmed var username = " " } ```

ترتيب التهيئة

تتم تهيئة المغلّفات من المغلّف الخارجي إلى الداخلي. وهذا يعني أن مُهيّئ المغلّف الخارجي يتلقى نتيجة تحويل المغلّف الداخلي، وليس القيمة الأصلية.

قيود التكديس

• لا تتوافق جميع المغلّفات معًا بسلاسة — تحقّقوا من تطابق أنواع `wrappedValue` • قد لا يسمح مترجم Swift دائمًا باستخدام مغلّفات متعددة (يعتمد ذلك على توافق نوع القيمة المغلّفة) • لا يتيح الوصول إلى `projectedValue` عبر `$x` سوى إسقاط المغلّف الخارجي

مثال SwiftUI: @EnvironmentObject + المراقبة

لا يتيح SwiftUI تكديس `@EnvironmentObject` و`@Published` على الخاصية نفسها، ولكن يمكنكم مراقبة نماذج `@EnvironmentObject` التي تستخدم `@Published` داخليًا.

تصحيح أخطاء المغلّفات المكدّسة

استخدموا `_propertyName` للوصول مباشرةً إلى مثيل المغلّف: ```swift print(form._username) // A> — the outer wrapper instance ```

بديل: تركيب المنطق داخل مغلّف واحد

غالبًا ما يكون تركيب المنطق داخل مغلّف واحد أوضح: ```swift @propertyWrapper struct CleanUsername { var wrappedValue: String { didSet { wrappedValue = clean(wrappedValue) } } func clean(_ s: String) -> String { let t = s.trimmingCharacters(in:.whitespaces) return t.isEmpty ? "(empty)" : t } } ```

أنماط التكديس العملية

المكدسات الشائعة الصالحة: • `@UserDefault` + `@Published` (حفظ البيانات + المراقبة) • `@NonNegative` + `@Clamped` (طبقات التحقّق) • المخصصة لإطار العمل: `@Environment` + `@Binding` في عروض SwiftUI

تحقق سريع

أيّ مغلّف تتم تهيئته أولًا عند تكديس مغلّفي خاصية؟

مراجعة

النقاط الأساسية: • تُعاد صياغة `@A @B var x` إلى `A>` • تتم تهيئة المغلّف الخارجي باستخدام `wrappedValue` الخاص بالمغلّف الداخلي كمدخل • يصل `$x` إلى `projectedValue` الخاص بالمغلّف الخارجي فقط • يتيح `_x` الوصول مباشرةً إلى مثيل المغلّف • يُفضّل استخدام مغلّف واحد مركّب بدلًا من التكديس العميق متى أمكن اكتملت الدورة! التالي: نوع Result.

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

هل درس «تركيب أغلفة خصائص متعددة» مجاني؟

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

ماذا ستتعلم في «تركيب أغلفة خصائص متعددة»؟

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

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

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

كم من الوقت يستغرق درس «تركيب أغلفة خصائص متعددة»؟

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

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

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

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

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