0Pricing
Swift Academy · درس

الأنواع الضمنية باستخدام الكلمة المفتاحية some

أعيدوا أنواعًا ضمنية من الدوال للحفاظ على هوية النوع دون كشفها.

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

المشكلة التي تحلها الأنواع المعتمة

يؤدي إرجاع نوع بروتوكول باستخدام any إلى فقدان معلومات النوع. أما some فيحافظ عليها مع إخفاء تفاصيل التنفيذ.

protocol Shape { var area: Double { get } }
struct Circle: Shape { var area: Double { .pi * 4 } }

إرجاع some Protocol

يخبر some Shape بوصفه نوع إرجاع المستدعيَ «سأُرجع نوعًا محددًا من Shape» من دون الكشف عن ماهيته.

func makeShape() -> some Shape {
  return Circle()
}
let s = makeShape()
print(s.area)

الحفاظ على هوية النوع

بما أن الأنواع some لها نوع أساسي ثابت، يسمح المترجم بالعمليات التي تتطلب Self.

func makeEquatableShape() -> some Shape & Equatable {
  return Circle()
}
let a = makeEquatableShape()
let b = makeEquatableShape()
print(a == b) // works because types match

some مقابل any

النوع some معتم، أي نوع واحد ثابت، بينما any وجودي، أي نوع مطابق للبروتوكول وقت التشغيل.

func withSome() -> some Shape { Circle() }  // opaque
func withAny() -> any Shape { Circle() }   // existential

some في جسم SwiftUI

تستخدم SwiftUI النوع some View كي يعيد جسم كل عرض نوعًا واحدًا ثابتًا من دون كشف تفاصيل التخطيط الداخلية.

struct ContentView: View {
  var body: some View {
    Text("Hello, World!")
  }
}

المعاملات المعتمة باستخدام some

يتيح Swift 5.7 والإصدارات الأحدث استخدام some Protocol في مواضع المعاملات بوصفه صياغة مختصرة لقيود الأنواع العامة.

func printArea(_ shape: some Shape) {
  print(shape.area)
}
printArea(Circle())

Generics المعكوسة

المعامل المعتم some P مكافئ لـ (_ value: T). ويستنتج المترجم قيمة T عند موضع الاستدعاء.

func doubled(_ value: some Numeric) -> some Numeric {
  value * 2
}

القيود على some

يمكنك تركيب البروتوكولات مع الأنواع المعتمة كما تفعل مع الأنواع العامة.

func process(_ item: some Codable & Hashable) {
  let hash = item.hashValue
  print(hash)
}

إرجاع أنواع مختلفة

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

// This would NOT compile:
// func shape(_ big: Bool) -> some Shape {
//   big ? Circle() : Square()  // ERROR: different types
// }

الأنواع المعتمة في البروتوكولات

تصبح البروتوكولات ذات الأنواع المرتبطة أسهل استخدامًا كأنواع إرجاع عند استخدام some.

protocol Buildable { associatedtype Output; func build() -> Output }
func build(_ b: some Buildable) -> some Any {
  b.build()
}

متى تختار some

فضّل some عندما تعيد نوعًا واحدًا ثابتًا وتريد الحفاظ على هويته. واستخدم any عندما تحتاج إلى مجموعات غير متجانسة.

var shapes: [any Shape] = [Circle(), Circle()]
let single: some Shape = Circle()

اختبار سريع

ما الذي تضمنه الكلمة المفتاحية some بشأن نوع الإرجاع؟

مراجعة الدرس

تنشئ some أنواع إرجاع معتمة تخفي النوع الفعلي مع الحفاظ على هوية النوع. ويُعد some View في SwiftUI المثال الأشهر. استخدم some لإرجاع نوع واحد، وany للمجموعات غير المتجانسة.

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

هل درس «الأنواع الضمنية باستخدام الكلمة المفتاحية some» مجاني؟

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

ماذا ستتعلم في «الأنواع الضمنية باستخدام الكلمة المفتاحية some»؟

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

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

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

كم من الوقت يستغرق درس «الأنواع الضمنية باستخدام الكلمة المفتاحية some»؟

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

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

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

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

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