كيف تجتاز مقابلة Swift: أهم الأسئلة والإجابات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة

مقابلة العمل لوظيفة مطور iOS/macOS ليست مجرد اختبار لمعرفة أطر العمل UIKit أو SwiftUI. في المقام الأول، يقيم صاحب العمل فهمك للغة Swift: بناء الجملة الخاص بها، ميزات إدارة الذاكرة، العمل مع تعدد المهام، ونظام الأنواع. حتى لو كنت تكتب التطبيقات بثقة، بدون أساس نظري يمكنك بسهولة أن تفشل في المقابلة التقنية.

في هذه المقالة، قمنا بتجميع أهم الأسئلة التي تُطرح غالبًا في مقابلات Swift في عام 2025. كل سؤال مصحوب بشرح مفصل ومثال كود. ستكون المادة مفيدة لكل من المبتدئين والمطورين ذوي الخبرة الذين يرغبون في تحديث معرفتهم.



1. الأنواع الاختيارية (Optionals) والأمان

لماذا تستخدم Swift الأنواع الاختيارية (Optionals)؟

Swift هي لغة ذات كتابة صارمة، والأنواع الاختيارية هي ميزتها الرئيسية للعمل الآمن مع nil. على عكس Objective-C، حيث nil هو مجرد مؤشر فارغ، في Swift Optional هو تعداد (enum) بحالتين: none (nil) و some(Wrapped). هذا يجبر المطور على معالجة غياب القيمة بشكل صريح، مما يمنع تعطل التطبيق.



كيف تستخرج قيمة من Optional؟

هناك عدة طرق:

  • Force unwrapping — العامل !. يُستخدم فقط عندما تكون متأكدًا تمامًا أن القيمة ليست nil.
  • Optional binding — بناء if let أو guard let.
  • Nil-coalescing operator — ?? لتعيين قيمة افتراضية.


var name: String? = "Alice"

// Force unwrapping (خطير!)print(name!)

// Optional bindingif let unwrappedName = name { print("Hello, \\(unwrappedName)")}

// Nil-coalescinglet displayName = name ?? "Guest"print(displayName)


ما هي الأنواع الاختيارية المفكوكة ضمنيًا (Implicitly Unwrapped Optionals - IUO)؟

هو نوع اختياري يتم فكه تلقائيًا عند الوصول إليه. يُعلن باستخدام ! بعد النوع. يُستخدم بشكل أساسي للخصائص التي تتم تهيئتها بعد init (مثل IBOutlet في UIKit). ومع ذلك، في Swift الحديث (5.x) تتصرف IUO مثل Optionals العادية، ويحذر المترجم من المخاطر.



2. إدارة الذاكرة: ARC ودورات المراجع القوية

كيف يعمل ARC في Swift؟

Automatic Reference Counting (ARC) هي آلية لحساب المراجع. كل مثيل من class له عداد مراجع. عندما ينخفض العداد إلى الصفر، يتم حذف الكائن من الذاكرة. يعمل ARC فقط مع reference types (class, closures). value types (struct, enum) تُخزن في المكدس وتُدار عن طريق النسخ.



ما هي دورة المراجع القوية (retain cycle)؟

تنشأ الدورة عندما يشير كائنان إلى بعضهما البعض عبر مراجع قوية، ولا يستطيع ARC تحريرهما. هذا يؤدي إلى تسرب الذاكرة. الحل هو استخدام المراجع الضعيفة (weak) أو غير المملوكة (unowned).



class Person {    let name: String    var apartment: Apartment?    init(name: String) { self.name = name }    deinit { print("\\(name) deallocated") }}

class Apartment { let unit: String weak var tenant: Person? // weak — يمنع الدورة init(unit: String) { self.unit = unit } deinit { print("Apartment \\(unit) deallocated") }}

var john: Person? = Person(name: "John")var unit4A: Apartment? = Apartment(unit: "4A")

john?.apartment = unit4Aunit4A?.tenant = john

john = nilunit4A = nil// سيتم تحرير كلا الكائنين


متى تستخدم weak ومتى تستخدم unowned؟

  • weak — دائمًا optional، يصبح تلقائيًا nil عند تحرير الكائن. يُستخدم عندما يكون عمر المرجع أقصر من عمر المالك.
  • unowned — non-optional، يفترض أن الكائن سيعيش لنفس المدة أو أطول. خطير: إذا تم تحرير الكائن، الوصول

المدونات

توصيات الكتب