0Pricing
Swift Academy · درس

القيود (where) والاستدلال على الأنواع

قيّد الشيفرة العامة باستخدام where ، مثل قيود Equatable وComparable أو Element، وشاهد كيف تستنتج Swift الأنواع العامة عند مواضع الاستدعاء.

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

لماذا القيود؟

أضف قيودًا لكي تستخدم الشيفرة العامة عمليات معينة، مثل == أو <. ثم يختار استنتاج النوع في Swift الأنواع الفعلية عند الاستدعاء.

قيد Equatable

يتيح where T: Equatable إجراء فحوصات المساواة. ومن دونه لا تتوفر == لأي T.

// Find the first index of value in an array of T
func indexOf<T>(_ value: T, in array: [T]) -> Int? where T: Equatable {
    for (i, x) in array.enumerated() {
        if x == value { return i }        // allowed because T: Equatable
    }
    return nil
}
print(indexOf(3, in: [1,2,3,2]) ?? -1)     // 2
print(indexOf("b", in: ["a","b","c"]) ?? -1)  // 1

قيد Comparable

يتيح استخدام قيد مثل T: Comparable عمليات الترتيب مثل <.

// Return the minimum value of a collection when elements are Comparable
func minimum<T: Comparable>(_ xs: [T]) -> T? {
    guard var best = xs.first else { return nil }
    for x in xs.dropFirst() {
        if x < best { best = x }
    }
    return best
}
print(minimum([7,3,9]) ?? -1)    // 3
print(minimum(["b","a","c"]) ?? "?") // "a"

امتداد باستخدام where

استخدم where Element: ... لإضافة واجهات API لأنواع معينة من العناصر فقط (هنا، للمصفوفات التي عناصرها من نوع Equatable).

// Add a helper only when the array's Element is Equatable
extension Array where Element: Equatable {
    func removingDuplicates() -> [Element] {
        var seen: [Element] = []
        for x in self {
            if !seen.contains(x) { seen.append(x) }
        }
        return seen
    }
}
print([1,2,2,3].removingDuplicates())   // [1,2,3]

قيود متعددة

ادمج القيود: قيّد النوع العام وأنواعه المرتبطة (مثل S.Element: Equatable).

// Require both Sequence and Equatable elements; force same-type relationship
func allEqual<S>(_ s: S) -> Bool
where S: Sequence, S.Element: Equatable {
    var it = s.makeIterator()
    guard let first = it.next() else { return true }
    while let v = it.next() { if v != first { return false } }
    return true
}
print(allEqual([2,2,2]))   // true
print(allEqual([1,2,1]))   // false

الاستنتاج عمليًا

يستنتج Swift المعاملات العامة من الوسائط والسياق، لذا نادرًا ما تحدد <T> صراحةً.

// Inference: compiler deduces concrete types
let i = indexOf(10, in: [5,10,15])   // T is Int
let j = minimum(["z","x"])           // T is String
print(i ?? -1, j ?? "")

معنى where

تحقق سريع: ماذا يفعل شرط where؟

خلاصة

الخلاصة: قيّد الأنواع العامة باستخدام where (مثل T: Equatable وElement: Comparable)، واعتمد على استنتاج النوع في Swift لاختيار الأنواع الفعلية عند الاستدعاء.

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

هل درس «القيود (where) والاستدلال على الأنواع» مجاني؟

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

ماذا ستتعلم في «القيود (where) والاستدلال على الأنواع»؟

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

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

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

كم من الوقت يستغرق درس «القيود (where) والاستدلال على الأنواع»؟

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

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

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

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

  1. الدوال والأنواع العامة
  2. القيود (where) والاستدلال على الأنواع
  3. الخوارزميات العامة على المجموعات
← العودة إلى Swift Academy