0Pricing
Swift Academy · درس

التوافق الشرطي

اجعلوا الأنواع العامة متوافقة مع البروتوكولات بشروط باستخدام عبارات where.

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

مرحبًا

تتيح المطابقة الشرطية لنوع عام أن يطابق بروتوكولًا فقط عندما تستوفي معلمة نوعه أو معلماته قيودًا معينة. وهذه من ركائز التعبيرية في نظام أنواع Swift.

المطابقة الشرطية الأساسية

```swift extension Array: Equatable where Element: Equatable { // Array is Equatable only when Element is Equatable } let a = [1,2,3] let b = [1,2,3] print(a == b) // true — works because Int is Equatable ```

نوع عام مخصص

```swift struct Box { var value: T } extension Box: Equatable where T: Equatable { static func == (lhs: Box, rhs: Box) -> Bool { lhs.value == rhs.value } } print(Box(value: 42) == Box(value: 42)) // true ```

المطابقة الشرطية مع Hashable

```swift extension Box: Hashable where T: Hashable { func hash(into hasher: inout Hasher) { hasher.combine(value) } } // Box is Hashable; Box is not ```

المطابقة الشرطية مع Codable

```swift extension Box: Codable where T: Codable {} let box = Box(value: "hello") let data = try JSONEncoder().encode(box) // works — String is Codable ```

عبارات where في الامتدادات

```swift extension Collection where Element == Int { var sum: Int { reduce(0, +) } } print([1,2,3,4].sum) // 10 // This extension only applies to collections of Int ```

قيود متعددة

```swift extension Dictionary where Key: Comparable, Value: Equatable { func sortedByKey() -> [(Key, Value)] { sorted { $0.key < $1.key } } } ```

التوافق الشرطي مع البروتوكول

```swift protocol Printable { func prettyPrint() } extension Optional: Printable where Wrapped: Printable { func prettyPrint() { switch self { case .none: print("nil") case .some(let v): v.prettyPrint() } } } ```

استخدام التوافق الشرطي

```swift let opt: Int? = 42 // If Int conformed to Printable: // opt.prettyPrint() // "42" // Standard usage: let nums = Optional([1,2,3]) // [1,2,3]? if let arr = nums, arr == [1,2,3] { ... } // Equatable via conditional ```

تحذير بشأن التوافق بأثر رجعي

تحذّر Swift 5.7+ من التوافقات بأثر رجعي (إضافة توافق إلى أنواع من وحدة أخرى): ```swift extension String: SomeThirdPartyProtocol {} // ⚠️ retroactive ``` ضعوا علامة `@retroactive` صراحةً عندما يكون ذلك مقصودًا.

تحقق سريع

ما الكلمة المفتاحية التي تُدخل شرطًا في امتداد توافق شرطي؟

مراجعة

أهم النقاط: • `extension T: Protocol where Param: Constraint` — التوافق الشرطي • تستخدم Arrays وOptional وResult وغيرها ذلك من أجل Equatable وHashable وCodable • يمكن للأنواع العامة المخصّصة فعل الشيء نفسه • يقيّد `where Element == Int` النوع إلى أنواع ملموسة محددة • تتطلب التوافقات بأثر رجعي `@retroactive` في Swift 5.7+ التالي: متطلبات Self.

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

هل درس «التوافق الشرطي» مجاني؟

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

ماذا ستتعلم في «التوافق الشرطي»؟

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

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

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

كم من الوقت يستغرق درس «التوافق الشرطي»؟

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

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

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

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

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