0Pricing
Swift Academy · درس

القيود العامة وعبارات where

طبّقوا قيودًا متعددة ومتطلبات النوع نفسه والامتدادات الشرطية.

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

مراجعة أساسيات الأنواع العامة

تتيح الأنواع العامة كتابة شيفرة مرنة قابلة لإعادة الاستخدام وتعمل مع أي نوع.

func identity<T>(_ value: T) -> T { return value }
print(identity(42))
print(identity("hello"))

قيد نوع واحد

قيّد المعامل العام ليطابق بروتوكولًا باستخدام T: Protocol.

func largest<T: Comparable>(_ a: T, _ b: T) -> T {
  return a > b ? a : b
}
print(largest(3, 7))

قيود متعددة باستخدام &

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

func process<T: Equatable & Hashable>(_ items: [T]) -> Set<T> {
  return Set(items)
}
print(process([1,2,2,3]))

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

تتيح لك عبارة where بعد قائمة المعاملات إضافة قيود أكثر دقة.

func allEqual<T: Equatable>(_ array: [T]) -> Bool where T: CustomStringConvertible {
  guard let first = array.first else { return true }
  return array.allSatisfy { $0 == first }
}

استخدام where في الامتدادات

وسّع نوعًا فقط عندما يفي معامله العام بمتطلب معين.

extension Array where Element: Numeric {
  var sum: Element { reduce(0, +) }
}
print([1,2,3].sum)

متطلبات تطابق النوع

قيّد نوعين مرتبطين ليكونا من النوع نفسه باستخدام T == U.

func zip2<A: Sequence, B: Sequence>(_ a: A, _ b: B) -> [(A.Element, B.Element)]
  where A.Element == B.Element {
  return Swift.zip(a, b).map { ($0.0, $0.1) }
}

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

اجعل نوعًا عامًا يطابق بروتوكولًا بشكل مشروط عندما تستوفي معاملاته القيود المطلوبة.

extension Array: Equatable where Element: Equatable {
  // stdlib already does this, shown for illustration
}
print([1,2] == [1,2])

الفئات العامة ذات القيود

يمكن للأنواع العامة الخاصة بالفئات أن تحمل قيودًا أيضًا، مما يضمن سلامة الأنواع عند إنشاء المثيلات.

class Box<T: Codable> {
  var value: T
  init(_ v: T) { self.value = v }
}
let box = Box(42)

بروتوكول مع قيود على النوع المرتبط

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

protocol Container {
  associatedtype Item: Equatable
  var items: [Item] { get }
  func contains(_ item: Item) -> Bool
}

عبارات where متعددة

اجمع عدة شروط where تفصل بينها فواصل للتعبير عن متطلبات معقدة.

func merge<C: Collection>(_ a: C, _ b: C) -> [C.Element]
  where C.Element: Comparable, C.Element: Hashable {
  return Array(Set(a + b)).sorted()
}

تخصيص النوع العام

تخصص Swift الدوال العامة وقت الترجمة للأنواع الفعلية، مما يتيح تحسين الأداء.

// @_specialize instructs the compiler to emit a specialized version
@_specialize(where T == Int)
func add<T: Numeric>(_ a: T, _ b: T) -> T { a + b }

اختبار سريع

كيف تشترط أن يطابق نوع عام كلًا من Comparable وHashable؟

مراجعة الدرس

تمنحك قيود الأنواع العامة باستخدام T: Protocol، والقيود المتعددة عبر &، وعبارات where للمتطلبات الدقيقة، ومتطلبات تطابق النوع، والمطابقة الشرطية تحكمًا دقيقًا في الشيفرة العامة.

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

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

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

ماذا ستتعلم في «القيود العامة وعبارات where»؟

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

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

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

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

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

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

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

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

  1. القيود العامة وعبارات where
  2. الأنواع الضمنية باستخدام الكلمة المفتاحية some
  3. الأنواع الوجودية باستخدام any ومحو النوع
  4. الأنواع الأساسية المرتبطة والأخطاء المعيّنة
← العودة إلى Swift Academy