0Pricing
Swift Academy · درس

الرموز الفرعية والفهارس المخصّصة مجددًا

عرّف الرموز الفرعية باستخدام get / set ، واقبل معلمات متعددة مثل مصفوفة ثنائية الأبعاد، واستخدم أنواع الفهارس المخصّصة مثل Enums لإنشاء واجهات API واضحة.

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

ما الفهارس الفرعية؟

تتيح الفهارس الفرعية فهرسة النسخ كما تُفهرس المصفوفات. يمكنكم:

  • إتاحة الوصول للقراءة فقط أو للقراءة والكتابة
  • قبول معاملات متعددة، مثل الصف والعمود
  • استخدام فهارس مخصّصة مثل التعدادات لتوضيح الغرض

فهرس فرعي للقراءة فقط

يمكن أن يكون الفهرس الفرعي للقراءة فقط بإرجاع قيمة من دون set.

struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int { multiplier * index } // read-only
}
let t = TimesTable(multiplier: 3)
print(t[4]) // 12

القراءة والكتابة باستخدام get/set

أضيفوا get/set لإتاحة القراءة والكتابة. تحقّقوا من الفهارس لتجنّب حدوث الأعطال.

struct SafeArray<T> {
    private var storage: [T]
    init(_ xs: [T]) { self.storage = xs }
    subscript(i: Int) -> T? {
        get { (0..<storage.count).contains(i) ? storage[i] : nil }
        set {
            guard let v = newValue, (0..<storage.count).contains(i) else { return }
            storage[i] = v
        }
    }
}
var s = SafeArray([10,20,30])
print(s[1] ?? -1) // 20
s[1] = 99
print(s[1] ?? -1) // 99
s[5] = 7          // ignored (out of range)

الفهرسة ثنائية الأبعاد

يمكن أن تقبل الفهارس الفرعية معاملات متعددة وأن تستخدم تسميات لتوضيح المعنى، مثل row/col.

struct Matrix {
    let rows: Int, cols: Int
    private var grid: [Int]
    init(_ r: Int, _ c: Int, fill: Int = 0) {
        rows = r; cols = c; grid = Array(repeating: fill, count: r * c)
    }
    private func valid(_ r: Int, _ c: Int) -> Bool { r >= 0 && r < rows && c >= 0 && c < cols }
    subscript(row r: Int, col c: Int) -> Int {
        get { precondition(valid(r,c), "Index out of range"); return grid[r*cols + c] }
        set { precondition(valid(r,c), "Index out of range"); grid[r*cols + c] = newValue }
    }
}
var m = Matrix(2, 3)
m[row: 0, col: 1] = 5
print(m[row: 0, col: 1]) // 5

فهرس مخصّص (تعداد)

استخدموا فهارس مخصّصة لجعل الغرض واضحًا: يمكن لتعداد أن يطابق القيم مع التخزين، مع الحفاظ على تعبيرية واجهة برمجة التطبيقات.

enum Day: Int, CaseIterable { case mon = 0, tue, wed, thu, fri, sat, sun }
struct Week {
    private var tasks = Array(repeating: "—", count: Day.allCases.count)
    subscript(day: Day) -> String {
        get { tasks[day.rawValue] }
        set { tasks[day.rawValue] = newValue }
    }
}
var w = Week()
w[.wed] = "Ship"
print(w[.wed])

نصائح التصميم

نصائح:

  • فضّلوا الفهارس الفرعية للوصول إلى العناصر، واستخدموا الأساليب لتنفيذ الإجراءات.
  • تحقّقوا من الفهارس باستخدام assert/precondition أو القيم الاختيارية الآمنة.
  • سمّوا المعاملات عند الوصول إلى محاور متعددة.
  • حافظوا على سرعة الفهارس الفرعية وقابليتها للتنبؤ.

تصريح القراءة والكتابة

تحقق سريع: أي تصريح يعرّف فهرسًا فرعيًا للقراءة والكتابة؟

الخلاصة

الخلاصة: أنشئوا فهارس فرعية للقراءة فقط وللقراءة والكتابة، واقبلوا معاملات متعددة كما في المصفوفات، وفضّلوا الفهارس المخصّصة مثل التعدادات لتحسين سهولة القراءة والسلامة.

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

هل درس «الرموز الفرعية والفهارس المخصّصة مجددًا» مجاني؟

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

ماذا ستتعلم في «الرموز الفرعية والفهارس المخصّصة مجددًا»؟

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

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

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

كم من الوقت يستغرق درس «الرموز الفرعية والفهارس المخصّصة مجددًا»؟

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

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

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

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

  1. التحميل الزائد على المعاملات ومجموعات الأولوية
  2. الرموز الفرعية والفهارس المخصّصة مجددًا
  3. اشتقاقات Hashable/Equatable/Comparable
← العودة إلى Swift Academy