Equatable المُنشأ تلقائيًا
احصل على == تلقائيًا وخصّصه عند الحاجة.
Equatable المُنشأ تلقائيًا درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
ما هو Equatable؟
إنّ Equatable هو البروتوكول الذي يوفّر للنوع العامل ==. يتيح الالتزام به مقارنة قيمتين للتحقق من تساويهما، واستخدامهما مع contains وfirstIndex وغيرهما.
الالتزام التلقائي
بالنسبة إلى بنية تكون جميع خصائصها المخزنة من النوع Equatable، ينشئ Swift العامل == تلقائيًا نيابةً عنك — ما عليك سوى التصريح بالالتزام:
struct Point: Equatable {
let x: Int
let y: Int
}
print(Point(x: 1, y: 2) == Point(x: 1, y: 2)) // true
print(Point(x: 1, y: 2) == Point(x: 9, y: 2)) // falseآلية الإنشاء التلقائي
يقارن العامل == المُنشأ كل زوج من الخصائص المخزنة. ويجب أن تكون جميعها متساوية حتى تتساوى القيمتان:
struct User: Equatable {
let name: String
let age: Int
}
let a = User(name: "Ann", age: 30)
let b = User(name: "Ann", age: 31)
print(a == b) // false (age differs)استخدام == مع المجموعات
يتيح Equatable العديد من العمليات على المصفوفات:
struct Tag: Equatable { let name: String }
let tags = [Tag(name: "a"), Tag(name: "b")]
print(tags.contains(Tag(name: "b"))) // true
print(tags.firstIndex(of: Tag(name: "a"))!) // 0التعدادات أيضًا من نوع Equatable
تحصل التعدادات أيضًا على Equatable مُنشأ تلقائيًا. تكون التعدادات التي لا تحتوي على قيم مرتبطة من نوع Equatable حتى من دون التصريح بذلك؛ أما التعدادات ذات القيم المرتبطة، فعليك التصريح بالالتزام، وستتم مقارنة القيم المرتبطة أيضًا.
تعداد Equatable بقيم مرتبطة
تشارك القيم المرتبطة في المقارنة:
enum Status: Equatable {
case active
case error(code: Int)
}
print(Status.error(code: 404) == Status.error(code: 404)) // true
print(Status.error(code: 404) == Status.error(code: 500)) // falseالأنواع المتداخلة
يعمل الإنشاء التلقائي بشكل تركيبي: يمكن إنشاء بنية تحتوي على أعضاء من نوع Equatable تلقائيًا:
struct Line: Equatable {
let start: Int
let end: Int
}
struct Shape: Equatable {
let lines: [Line]
}
print(Shape(lines: [Line(start: 0, end: 1)]) == Shape(lines: [Line(start: 0, end: 1)])) // trueمتى يفشل الإنشاء التلقائي
إذا لم تكن أي خاصية مخزنة من النوع Equatable، فلن يتوفر الإنشاء التلقائي، وسيتعين عليك كتابة == بنفسك (وسنتناول ذلك لاحقًا):
struct Box: Equatable {
let id: Int
static func == (l: Box, r: Box) -> Bool { l.id == r.id }
}
print(Box(id: 1) == Box(id: 1)) // trueالفئات لا تحصل على الإنشاء التلقائي
لا تحصل الأنواع المرجعية على == مُنشأ تلقائيًا؛ بل يجب عليك تنفيذه بنفسك (بمقارنة الهوية أو الحقول):
final class Account: Equatable {
let id: Int
init(id: Int) { self.id = id }
static func == (l: Account, r: Account) -> Bool { l.id == r.id }
}
print(Account(id: 7) == Account(id: 7)) // trueيأتي != تلقائيًا
بمجرد وجود ==، يُشتق != تلقائيًا باعتباره نفيًا له:
struct Color: Equatable { let hex: String }
print(Color(hex: "#fff") != Color(hex: "#000")) // trueEquatable في التعليمات البرمجية العامة
يتيح Equatable للدوال العامة مقارنة العناصر — إذ تتطلبه خوارزميات كثيرة:
func allSame<T: Equatable>(_ xs: [T]) -> Bool {
guard let first = xs.first else { return true }
return xs.allSatisfy { $0 == first }
}
print(allSame([2, 2, 2])) // true
print(allSame(["a", "b"])) // falseتحقق سريع
لأي نوع ينشئ Swift العامل == تلقائيًا عند التصريح عن Equatable؟
مراجعة
لقد تعلمتم Equatable:
- يوفّر
Equatableالعامل==(والعامل!=مجانًا) - تحصل البنى والتعدادات ذات الأعضاء من نوع Equatable على
==مُنشأ تلقائيًا - يتيح استخدام
containsوfirstIndex(of:)وغيرهما - تتطلب الفئات والأعضاء غير المنتمين إلى Equatable كتابة
==يدويًا
التالي: Hashable.
الأسئلة الشائعة
هل درس «Equatable المُنشأ تلقائيًا» مجاني؟
نعم — نص درس «Equatable المُنشأ تلقائيًا» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «Equatable المُنشأ تلقائيًا»؟
احصل على == تلقائيًا وخصّصه عند الحاجة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «Equatable المُنشأ تلقائيًا»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Equatable المُنشأ تلقائيًا
- Hashable و hash(into:)
- Comparable والترتيب
- دلالات المساواة المخصصة