0Pricing
Swift Academy · درس

تصميم واجهات API لدلالات القيم

اختاروا بين struct وclass عند تصميم الواجهات العامة والأطر البرمجية.

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

مرحبًا

يؤدي تصميم الواجهات البرمجية حول دلالات القيمة إلى شيفرة يمكن التنبؤ بها، وآمنة على مستوى الخيوط، وسهلة الاختبار. لنستعرض المبادئ والأنماط التي تساعدكم على اتخاذ هذا الخيار.

عقد دلالات القيمة

يتمتع النوع بدلالات القيمة إذا: • ظلت نسختان مستقلتان مستقلتين إلى الأبد • لم يؤثر تغيير إحدى النسختين في الأخرى مطلقًا • تصرف النوع مثل `Int` — تترك `a = b; a += 1` قيمة `b` من دون تغيير

الواجهة البرمجية العامة: فضّلوا أنواع الإرجاع ذات القيمة

```swift // Reference semantics — caller shares state: func getUser() -> UserClass { ... } // Value semantics — caller gets independent copy: func getUser() -> UserStruct { ... } ``` تحمي أنواع الإرجاع ذات القيمة الحالة الداخلية من التغيير الخارجي.

أنواع المراجع غير القابلة للتغيير

عندما تكون class غير قابلة للتغيير دائمًا، فإن سلوكها يشبه سلوك القيم: ```swift final class Token { let value: String init(_ v: String) { value = v } // No mutable state — safe to share freely } ```

قائمة التحقق لاختيار Struct بدلًا من Class

فضّلوا struct عندما: ✓ يمثّل النوع بيانات، لا هوية ✓ لا توجد حاجة إلى الوراثة ✓ لا ينبغي مشاركة المثيلات أو إنشاء مراجع مستعارة لها ✓ يمكن مقارنة قيمته بـ Equatable عبر مقارنة قيم الحقول ✓ يعمل جيدًا مع Swift Concurrency (Sendable)

Sendable ودلالات القيمة

يتطلب Swift 6 Concurrency أن تكون الأنواع التي تعبر حدود actors من نوع `Sendable`: ```swift struct Message: Sendable { var text: String; var timestamp: Date } // Safe to pass between actors ``` تكون أنواع القيم التي تحتوي على خصائص كلها من نوع Sendable من نوع `Sendable` تلقائيًا.

جعل واجهات Class البرمجية آمنة للقيم

```swift struct Config { // Expose value snapshot instead of the class: func snapshot() -> Config { self } // copy by value semantics } // Or use a value-type DTO: struct UserDTO: Sendable { var id: UUID; var name: String } ```

نمط Builder باستخدام أنواع القيم

```swift struct Request { var url: URL var method: String = "GET" var headers: [String:String] = [:] func adding(header: String, value: String) -> Request { var copy = self copy.headers[header] = value return copy } } let r = Request(url: url).adding(header: "Auth", value: "Bearer x") ```

إشارة توثيق الواجهة البرمجية

يوصل اختيار struct بدلًا من class إشارة واضحة إلى مستخدمي الواجهة البرمجية: • «هذه بيانات — انسخوها بحرية» • «لن يؤثر تغيير نسختكم في نسختي» • «يمكن تمرير هذا بأمان بين الخيوط» ويقلل ذلك الحاجة إلى النسخ الوقائي في شيفرة المستخدمين.

متى تُقبل دلالات المرجع

اقبلوا دلالات class أو المرجع عندما: • تكون الهوية مهمة (`===`): يمكن لكائنَي `User` تمثيل الشخص نفسه • تكون الحالة المشتركة القابلة للتغيير هي الميزة: `Database` و`Cache` و`AudioEngine` • تكون هناك حاجة إلى التكامل مع ObjC: أنواع UIKit وAppKit هي classes • تكون هناك استدعاءات لدورة الحياة: `deinit` لتنظيف الموارد

تحقق سريع

ما الكلمة المفتاحية في Swift التي تحدد أن النوع آمن للتمرير عبر حدود actors في Swift Concurrency؟

مراجعة

أهم النقاط: • دلالات القيمة: التغييرات محلية، ولا توجد مشاركة مرجعية • فضّلوا struct لنماذج البيانات، وclass للهوية ودورة الحياة • تتصرف classes غير القابلة للتغيير مثل أنواع القيم • `Sendable` + أنواع القيم = تزامن آمن • ينشئ نمط Builder باستخدام نسخ struct واجهات برمجية نظيفة وغير قابلة للتغيير اكتملت الدورة! التالي: أنماط ARC وإدارة الذاكرة.

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

هل درس «تصميم واجهات API لدلالات القيم» مجاني؟

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

ماذا ستتعلم في «تصميم واجهات API لدلالات القيم»؟

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

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

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

كم من الوقت يستغرق درس «تصميم واجهات API لدلالات القيم»؟

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

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

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

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

  1. المكدس مقابل الكومة: أين تعيش القيم
  2. التعديل والمشاركة والاسم المستعار غير المتوقّع
  3. رسوم بيانية مختلطة للقيم والمراجع
  4. تصميم واجهات API لدلالات القيم
← العودة إلى Swift Academy