0Pricing
Swift Academy · درس

متطلبات Self وتصميم Equatable

تعرّفوا إلى البروتوكولات التي تستخدم Self، وكيف تستفيد منها Equatable وComparable.

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

مرحبًا

يشير `Self` في البروتوكول إلى النوع الملموس المتوافق معه. ويتيح لبروتوكولات مثل `Equatable` و`Comparable` العمل بأمان مع أنواع غير متجانسة.

Self كنوع للمعامل

```swift protocol Equatable { static func == (lhs: Self, rhs: Self) -> Bool } ``` يعني `Self` أن المعاملين يجب أن يكونا من النوع الملموس نفسه. ولا يمكنكم مقارنة `Int` بـ`String` من خلال هذا البروتوكول.

التوافق مع Equatable

```swift struct Point: Equatable { var x: Double var y: Double // Auto-synthesised: // static func == (lhs: Point, rhs: Point) -> Bool // { lhs.x == rhs.x && lhs.y == rhs.y } } print(Point(x:1,y:2) == Point(x:1,y:2)) // true ```

Comparable مع Self

```swift struct Version: Comparable { let major, minor, patch: Int static func < (lhs: Version, rhs: Version) -> Bool { (lhs.major, lhs.minor, lhs.patch) < (rhs.major, rhs.minor, rhs.patch) } } let v1 = Version(major:1,minor:2,patch:0) let v2 = Version(major:2,minor:0,patch:0) print(v1 < v2) // true ```

Self كنوع إرجاع

```swift protocol Clonable { func clone() -> Self } class Animal: Clonable { var name: String = "" required init() {} func clone() -> Self { type(of: self).init() } } ``` يعني `Self` في نوع الإرجاع أن الأنواع الفرعية تُرجع نوعها الخاص، وليس `Animal`.

بروتوكول ذو متطلب Self (PAT)

```swift protocol Scalable { func scaled(by factor: Double) -> Self } struct Size: Scalable { var w, h: Double func scaled(by f: Double) -> Size { Size(w: w*f, h: h*f) } } ```

Hashable: ‏Self + Equatable

```swift struct Color: Hashable { var r, g, b: UInt8 // Auto-synthesised: func hash(into:) and == } var palette: Set = [] palette.insert(Color(r:255,g:0,b:0)) ``` يتطلب `Hashable` التوافق مع `Equatable` — ويُولَّد كلاهما تلقائيًا للبُنى البسيطة.

لا يمكن استخدام البروتوكولات ذات Self كأنواع وجودية مباشرةً

```swift // Before Swift 5.7: var shapes: [Equatable] = [] // ❌ Equatable has Self requirement // After Swift 5.7 with 'any': var boxes: [any Equatable] = [] // ⚠️ limited API ``` تتيح الكلمة المفتاحية `any` استخدام التغليف الوجودي صراحةً.

متطلبات التوليد التلقائي

يتطلب التوليد التلقائي لـ`Equatable`/`Hashable`/`Comparable` ما يلي: • توافق جميع الخصائص المخزّنة مع البروتوكول نفسه • توافق حالات التعداد، بما في ذلك القيم المرتبطة ```swift struct Pair: Equatable { var a, b: T } // Equatable synthesised automatically ```

تجاوز Equatable مخصّص

```swift struct Person: Equatable { var id: UUID var name: String // Only compare by id, ignore name: static func == (lhs: Person, rhs: Person) -> Bool { lhs.id == rhs.id } } ```

تحقق سريع

إلى ماذا يشير `Self` في البروتوكول؟

مراجعة

أهم النقاط: • `Self` = النوع الملموس المتوافق مع البروتوكول • تستخدم `Equatable` و`Comparable` و`Hashable` جميعًا `Self` • تُولّد Swift هذه التوافقات تلقائيًا للبُنى والتعدادات البسيطة • يمنح `Self` في أنواع الإرجاع واجهات برمجية تحافظ على النوع • تحتاج البروتوكولات ذات متطلبات Self إلى `any` للأنواع الوجودية (Swift 5.7+) التالي: مبادئ التصميم الموجّه بالبروتوكولات.

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

هل درس «متطلبات Self وتصميم Equatable» مجاني؟

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

ماذا ستتعلم في «متطلبات Self وتصميم Equatable»؟

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

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

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

كم من الوقت يستغرق درس «متطلبات Self وتصميم Equatable»؟

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

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

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

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

  1. تركيب البروتوكولات باستخدام &
  2. التوافق الشرطي
  3. متطلبات Self وتصميم Equatable
  4. مبادئ التصميم الموجّه بالبروتوكولات
← العودة إلى Swift Academy