0Pricing
Swift Academy · درس

رسوم بيانية مختلطة للقيم والمراجع

تعرّفوا إلى البنى التي تحتوي على أصناف، ودلالات المراجع الخفية وكيفية التعامل معها.

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

مرحبًا

يمكن أن تحتوي structs على classes بصفتها خصائص مخزنة. وعند حدوث ذلك، تتصرف struct كنوع قيمة من الخارج، لكنها تشارك مرجع class داخليًا — وهو فخ دقيق.

Struct تحتوي على Class

```swift class Storage { var data: [Int] = [] } struct Container { var storage = Storage() var label: String = "" } var a = Container() var b = a // copies label, but SHARES storage! a.storage.data.append(1) print(b.storage.data) // [1] — shared! ```

لا تُنسخ إلا خصائص القيم

عند نسخ struct: • تُنسخ خصائص نوع القيمة (`label: String`) بالكامل • خصائص نوع المرجع (`storage: Storage`) — يُنسخ المؤشر فقط تُسمّى هذه «نسخة سطحية».

إنشاء نسخة عميقة

```swift struct Container { var storage: Storage func deepCopy() -> Container { let newStorage = Storage() newStorage.data = storage.data // copy values return Container(storage: newStorage, label: label) } } ```

COW لإنقاذ الموقف

تتجنب مجموعات Swift الخاصة بها ذلك باستخدام COW: ```swift struct SafeContainer { private(set) var storage = Storage() mutating func append(_ n: Int) { if !isKnownUniquelyReferenced(&storage) { storage = storage.copy() // copy before mutating } storage.data.append(n) } } ```

Classes التي تحتوي على Structs

```swift class ViewModel { var point = CGPoint(x: 0, y: 0) // value type inside reference type } let vm1 = ViewModel() let vm2 = vm1 // same ViewModel! vm1.point.x = 5 print(vm2.point.x) // 5 — shared because ViewModel is a class ```

الهوية مقابل التساوي

```swift class Dog { var name: String = "" } let x = Dog() let y = x print(x === y) // true — same object print(x !== y) // false let z = Dog() print(x === z) // false — different objects ```

Struct递ursive عبر Class

لا يمكن لـ structs الإشارة إلى نفسها، لكنها يمكن أن تحتوي على class تشير إلى struct: ```swift struct Tree { var value: Int var children: [Tree] // OK — Array uses class internally } ```

اكتشاف المشاركة غير المتوقعة

استخدموا `isKnownUniquelyReferenced` أثناء التشغيل لاكتشاف المشاركة: ```swift var s = Storage() var r: AnyObject = s print(isKnownUniquelyReferenced(&s)) // true var s2 = s print(isKnownUniquelyReferenced(&s)) // false — shared ```

إرشادات التصميم

عندما يجب أن تحتوي struct على حالة قابلة للتغيير من نوع مرجع: 1. نفّذوا COW لاستعادة دلالات القيمة 2. أو استخدموا class غير قابلة للتغيير: `let` بدلًا من `var` لخاصية class 3. أو أعيدوا التصميم — فربما ينبغي أن تكون struct هي class وثّقوا بوضوح الحالات التي تكون فيها المشاركة مقصودة.

تحقق سريع

عند نسخ struct تحتوي على خاصية من نوع class، ماذا يحدث لـ class؟

مراجعة

أهم النقاط: • نسخ struct سطحي — مراجع class مشتركة • تكتشف `isKnownUniquelyReferenced` المشاركة أثناء التشغيل • نفّذوا COW لاستعادة دلالات القيمة الحقيقية • تختبر `===` و`!==` هوية الكائنات في classes • تستخدم البنى التكرارية Array (المدعومة داخليًا بواسطة class) بصفتها أبناء التالي: تصميم واجهات برمجية لدلالات القيمة.

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

هل درس «رسوم بيانية مختلطة للقيم والمراجع» مجاني؟

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

ماذا ستتعلم في «رسوم بيانية مختلطة للقيم والمراجع»؟

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

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

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

كم من الوقت يستغرق درس «رسوم بيانية مختلطة للقيم والمراجع»؟

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

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

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

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

  1. المكدس مقابل الكومة: أين تعيش القيم
  2. التعديل والمشاركة والاسم المستعار غير المتوقّع
  3. رسوم بيانية مختلطة للقيم والمراجع
  4. تصميم واجهات API لدلالات القيم
← العودة إلى Swift Academy