أعلى 40 Swift أسئلة وأجوبة المقابلة (2026)

يستعد ل Swift مقابلة المطور تعني توقع ما يقيمه القائمون على المقابلة فعلاً بما يتجاوز قواعد اللغة. Swift تكشف أسئلة المقابلة عن عمق حل المشكلات، وحُكم البرمجة، والفهم العملي في ظل سيناريوهات حقيقية.
تُتيح هذه الأدوار مسارات وظيفية واعدة مع تزايد استخدام نظام iOS، حيث تُكافئ الخبرة التقنية، والمعرفة المتخصصة، والتجربة العملية في بيئة الإنتاج. يُطبّق المحترفون العاملون في هذا المجال التحليل، ويُعمّقون مهاراتهم، ويتعاونون مع الفرق، ويُساعدون المديرين وكبار المسؤولين، ويُجيبون بثقة على الأسئلة الشائعة من المبتدئين إلى ذوي الخبرة على مستوى العالم اليوم. اقرأ أكثر…
👉 تنزيل مجاني بصيغة PDF: Swift أسئلة وأجوبة المقابلة
★★★★ Swift أسئلة وأجوبة المقابلة
1) ما هو Swift وما الذي يجعله شائعًا لتطوير تطبيقات iOS؟
Swift هو لغة برمجة حديثة وعالية المستوى طورتها شركة آبل لبناء تطبيقات على نظام iOS، macOS، وwatchOS، وtvOS. وهو يركز على السلامة والأداء والتعبيرمع ميزات مثل أنواع اختيارية, اكتب الاستدلالو إدارة الذاكرة التلقائية. Swiftتتميز صيغة 's بالإيجاز والقوة، مما يقلل من احتمالية حدوث أخطاء البرمجة الشائعة مثل إلغاء مرجعية المؤشر الفارغ وعدم تطابق الأنواع. Swift يدعم أيضا البرمجة الموجهة نحو البروتوكول (POP) إلى جانب النماذج التقليدية الموجهة للكائنات، مما يتيح كتابة أكواد أكثر نمطية وقابلة لإعادة الاستخدام.
على سبيل المثال: Swiftالصورة نوع اختياري يغلف متغيرًا قد يحتوي على قيمة أو لا يحتوي عليها، مما يمنع حدوث أعطال غير متوقعة في وقت التشغيل بسبب المراجع الفارغة، وهو مصدر متكرر للأخطاء في اللغات السابقة مثل Objective-C.
2) كيف تُعلن عن المتغيرات والثوابت في Swiftما الفرق بين var و let؟
لتعريف متغير في Swift، أنت تستخدم varلتعريف ثابت، يمكنك استخدام let. A عامل (var) يمكن تغيير قيمتها بعد تعيينها، بينما ثابت (let) لا يمكن إعادة تعيينها بمجرد تهيئتها - مما يعزز كتابة كود أكثر أمانًا وقابلية للتنبؤ.
على سبيل المثال:
var age = 25 // Variable let name = "John" // Constant, value cannot change
إذا حاولت إعادة تعيين قيمة إلى let إذا كان الثابت هو القيمة التي يُصدرها المُصرّف، فسيُصدر خطأً. هذا التمييز يُفرض عدم قابلية التغيير افتراضيًا حيثما أمكن، مما يُحسّن استقرار البرنامج.
3) ما هي الخيارات في Swift ولماذا هي مهمة؟
الخيارات في Swift هي خاصية لغوية تعبر عن احتمال ألا يكون للمتغير قيمةبدلاً من افتراض أن المتغير يحتوي دائمًا على بيانات، Swift يستخدم ? صيغة تشير إلى أن المتغير قد يكون nilمما يجعل الكود أكثر أمانًا من خلال إجبار المطور على فك التغليف أو التعامل مع غياب القيمة بشكل صريح.
على سبيل المثال:
var number: Int? = nil // This variable might hold an Int or nil
if let safeNumber = number {
print(safeNumber)
} else {
print("No value present")
}
تساعد القيم الاختيارية في اكتشاف الأخطاء في وقت الترجمة والتي قد تظهر في وقت التشغيل.
4) ما الفرق بين أنواع القيم وأنواع المراجع في Swift?
In Swift, أنواع القيمة (مثل struct, enum, tuple) قم بتخزين نسخة فريدة من البيانات، بينما أنواع المراجع (مثل class) مشاركة نسخة واحدة عبر مراجع متعددة.
| الميزات | نوع القيمة (struct, enum) |
نوع المرجع (الفئة) |
|---|---|---|
| سلوك الذاكرة | نسخة في المهمة | مرجع مشترك |
| حالة الاستخدام | نماذج البيانات، بيانات خفيفة الوزن | الكائنات، الحالة المشتركة |
| وراثة | غير معتمد | عائلات |
| مثال | struct Point { … } |
class Person { … } |
على سبيل المثال:
struct Score { var value: Int }
var first = Score(value: 10)
var second = first
second.value = 20
print(first.value) // 10 (unchanged)
يوضح هذا كيف أن التغييرات التي تطرأ على نسخة لا تؤثر على الأصل بالنسبة لأنواع القيم.
5) ما هو نظام العد المرجعي التلقائي (ARC)؟ وكيف يعمل؟ Swift?
نظام العد المرجعي التلقائي (ARC) Swiftالصورة نظام إدارة الذاكرة يقوم هذا النظام بإدارة تخصيص وتحرير الذاكرة تلقائيًا لمثيلات الفئات. عند إنشاء مثيل، يقوم ARC tracيُظهر ks عدد المراجع التي تشير إليه. عندما ينخفض عدد المراجع إلى الصفر، يتم تحرير المثيل.
النقاط الرئيسية:
- مراجع قوية زيادة عدد المراجع.
- مراجع ضعيفة أو غير مملوكة لا تزيد من العدد وتساعد في منع دورات الاحتفاظ، والتي يمكن أن تسبب تسرب الذاكرة في تطبيقات iOS.
على سبيل المثال: تحدث دورة الاحتفاظ الشائعة عندما يحتفظ كائنان بمراجع قوية لبعضهما البعض. باستخدام weak or unowned يمكن للكلمات المفتاحية أن تكسر هذه الحلقة.
6) ما هو التسلسل الاختياري؟
التسلسل الاختياري هو طريقة مختصرة للاستعلام عن الخصائص والأساليب والفهارس واستدعائها على متغير اختياري قد يكون حاليًا nilإذا احتوى المتغير الاختياري على قيمة، تنجح العملية؛ أما إذا كان غير ذلك. nil، تعود السلسلة بأكملها nil دون أن تتحطم.
على سبيل المثال:
let text: String? = "Hello" let count = text?.count // count is an Optional<Int>
تتجنب هذه التقنية عملية الفتح القسريping (!)، مما يؤدي إلى كود أكثر أمانًا مع عدد أقل من الأعطال.
7) كيف تختلف عبارات الحماية عن عبارات الشرط في Swift?
استخدم guard تُستخدم هذه العبارة للخروج المبكر في حال عدم استيفاء شرط معين. يجب أن تُنهي النطاق الحالي (مع return, break, continue أو throw) عند فشل الشرط. وهذا يشجع على التعامل الواضح مع الحالات غير الصالحة مسبقًا.
على سبيل المثال:
func checkUsername(_ name: String?) {
guard let safeName = name else {
print("Username was nil")
return
}
print("User: \(safeName)")
}
على عكس if عبارة تتضمن منطقًا متداخلًا، guard يساعد على تبسيط الكود وتحسين قابليته للقراءة.
8) ما هي عمليات الإغلاق في Swiftكيف تكون مفيدة؟
عمليات الإغلاق كتل برمجية مستقلة يمكن تمريرها كقيم واستخدامها كمعالجات رد نداء، أو معالجات إكمال، أو منطق عمليات مخصص. وهي تشبه الدوال المجهولة أو الدوال اللامدا في لغات البرمجة الأخرى.
على سبيل المثال:
let sumClosure = { (a: Int, b: Int) -> Int in
return a + b
}
print(sumClosure(5, 7)) // 12
تلتقط عمليات الإغلاق القيم من سياقها المحيط، مما يتيح أنماط برمجة غير متزامنة ووظيفية قوية.
9) اشرح الأدوية الجنيسة في Swift وأهميتها.
تتيح لك الأنواع العامة كتابة وظائف وأنواع مرنة وقابلة لإعادة الاستخدام العمل مع أي نوع مع الحفاظ على سلامة النوع. وهي تستخدم على نطاق واسع في Swift المكتبة القياسية (مثل Array, Dictionary، وما إلى ذلك).
على سبيل المثال:
func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
تعمل الأنواع العامة على تحسين إعادة استخدام التعليمات البرمجية وتقليل التكرار، مما يتيح لك كتابة تعليمات برمجية قويةtractions بشكل آمن.
10) ما الفرق بين دوال map و filter و reduce في لغة البرمجة ؟ Swift?
تُعد هذه الوظائف جزءًا من Swiftالصورة أدوات البرمجة الوظيفية بخصوص المجموعات:
- خريطة: يُحوّل كل عنصر.
- منقي: يختار العناصر التي تستوفي الشرط.
- يقلل: يجمع جميع العناصر في قيمة واحدة.
على سبيل المثال:
let numbers = [1, 2, 3, 4, 5]
let squares = numbers.map { $0 * $0 } // [1,4,9,16,25]
let evens = numbers.filter { $0 % 2 == 0 } // [2,4]
let sum = numbers.reduce(0, +) // 15
تتيح هذه الأدوات معالجة البيانات بشكل معبر وموجز في Swift مجموعات.
11) كيف يعمل استنتاج النوع في Swiftوما هي فوائده؟
استنتاج النوع في Swift هي ميزة في المُصرّف تُحدد تلقائيًا نوع بيانات المتغير أو الثابت بناءً على القيمة المُسندة إليه. وهذا يُتيح للمطورين كتابة شفرة برمجية أنظف وأكثر قابلية للقراءة دون الحاجة إلى تحديد الأنواع صراحةً في كثير من الحالات. Swiftيقوم المترجم بتحليل التعبير المعين ويستنتج النوع الأنسب في وقت الترجمة، مما يضمن سلامة النوع مع تقليل الإسهاب.
تتمثل الفائدة الرئيسية لاستنتاج الأنواع في تحسين إنتاجية المطورين وتقليل الشيفرة النمطية. كما أنه يقلل من التكرار، مما يجعل Swift الكود أكثر تعبيرًا وأقرب إلى اللغة الطبيعية. على الرغم من كونه ضمنيًا، فإن استنتاج النوع لا يضر بالأمان لأن Swift لا تزال لغة ذات كتابة ثابتة.
على سبيل المثال:
let count = 10 // Inferred as Int let message = "Hi" // Inferred as String let price = 19.99 // Inferred as Double
يعمل استنتاج النوع بسلاسة مع الأنواع العامة والإغلاقات والمجموعات، مما يتيح Swift للحفاظ على الوضوح حتى في التعبيرات المعقدة.
12) ما هي البروتوكولات في Swiftوكيف تختلف عن واجهات المستخدم في اللغات الأخرى؟
البروتوكولات في Swift تعريف مخطط الأساليب والخصائص والمتطلبات التي يجب على الأنواع المتوافقة تنفيذها. وهي أساسية لـ البرمجة الموجهة نحو البروتوكول (POP)وهو نموذج تم تشجيعه بقوة من قبل Swiftعلى عكس الواجهات التقليدية في بعض اللغات، Swift يمكن للبروتوكولات أن توفر التطبيقات الافتراضية من خلال امتدادات البروتوكول.
يمكن اعتماد البروتوكولات بواسطة الفئات والهياكل والأنواع المُعدّدة، مما يجعلها أكثر مرونة من الأنظمة القائمة على الوراثة.tracكما أنها تدعم التوافقات المتعددة، على عكس الوراثة الفردية في الفئات.
على سبيل المثال:
protocol Drivable {
var speed: Int { get }
func drive()
}
extension Drivable {
func drive() {
print("Driving at speed \(speed)")
}
}
يعزز هذا النهج الترابط المرن، وقابلية الاختبار، والمنطق القابل لإعادة الاستخدام عبر أنواع غير مترابطة، مما يجعل البروتوكولات أكثر قوة من الواجهات الكلاسيكية.
13) اشرح الفرق بين البنية والفئة في Swift مع الأمثلة.
الفرق بين struct و class in Swift يكمن جوهر الأمر في دلالات القيمة مقابل دلالات المرجعتُعتبر البنى أنواع قيم، أي أنها تُنسخ عند إسنادها أو تمريرها. أما الأصناف فهي أنواع مرجعية، أي أن عدة مراجع يمكن أن تشير إلى نفس النسخة.
| البعد | الهيكل | الفئه |
|---|---|---|
| النوع | نوع القيمة | نوع مرجع |
| ذاكرة | نسخ | المشتركة |
| وراثة | غير معتمد | عائلات |
| ARC | غير مستعمل | مستعمل |
| التحولية | يتطلب mutating |
غير مطلوب |
على سبيل المثال:
struct User {
var name: String
}
var user1 = User(name: "Alice")
var user2 = user1
user2.name = "Bob"
هنا، user1 تبقى دون تغيير. هذه القدرة على التنبؤ تجعل الهياكل مثالية للنماذج وحاويات البيانات.
14) ما هي دورة حياة تطبيق iOS مكتوب بلغة Swift?
تُحدد دورة حياة تطبيقات نظام iOS المراحل المختلفة التي يمر بها التطبيق من لحظة تشغيله إلى لحظة إغلاقه. ويُعد فهم هذه الدورة أمرًا بالغ الأهمية لإدارة الموارد، ومعالجة المهام التي تعمل في الخلفية، والاستجابة لأحداث النظام.
تشمل المراحل الرئيسية لدورة حياة المنتج ما يلي:
- إطلاق التطبيق
- الحالة النشطة
- حالة الخلفية
- حالة معلقة
- حالة نهائية
Swift تتعامل التطبيقات مع هذه التحولات بشكل أساسي من خلال AppDelegate و مندوب المشهد الأساليب. على سبيل المثال، application(_:didFinishLaunchingWithOptions:) يُستخدم للإعداد الأولي، بينما sceneDidEnterBackground(_:) يُستخدم لتحرير الموارد المشتركة.
مثال لحالة الاستخدام: عندما يتلقى المستخدم مكالمة هاتفية، ينتقل التطبيق إلى الخلفية. يجب على المطورين حفظ بيانات المستخدم وإيقاف المهام الجارية مؤقتًا لضمان تجربة سلسة عند استئناف التطبيق.
15) ما هو دور مراقبي الملكية؟ Swiftومتى ينبغي استخدامها؟
مراقبو العقارات في Swift تتيح هذه الميزة للمطورين مراقبة التغييرات في قيمة العقار والاستجابة لها. ويتم تنفيذها باستخدام willSet و didSetوالتي يتم تنفيذها قبل وبعد تغيير الخاصية، على التوالي.
تُعد مراقبات الخصائص مفيدة لتفعيل التأثيرات الجانبية مثل تحديث واجهة المستخدم، أو التحقق من صحة المدخلات، أو مزامنة البيانات عند تغيير القيم.
على سبيل المثال:
var score: Int = 0 {
willSet {
print("Score will change to \(newValue)")
}
didSet {
print("Score changed from \(oldValue)")
}
}
لا يتم تشغيل أدوات المراقبة أثناء التهيئة، مما يمنع حدوث سلوك غير متوقع عند إنشاء الكائن. وهي الأنسب لمنطق المراقبة البسيط بدلاً من العمليات الحسابية المعقدة.
16) كيف تتم معالجة الأخطاء في Swift?
Swift يستخدم نموذجًا منظمًا لمعالجة الأخطاء يعتمد على رمي الكرة، والتقاطها، ونشر الأخطاءيجب أن تتوافق الأخطاء مع Error ويتم التعامل معها باستخدام البروتوكول do-try-catch كتل.
تشمل المكونات الرئيسية ما يلي:
throwsالكلمة المفتاحية للوظائفtry,try?وtry!- تعدادات الأخطاء المخصصة
على سبيل المثال:
enum LoginError: Error {
case invalidCredentials
}
func login(user: String) throws {
throw LoginError.invalidCredentials
}
يفرض هذا النهج معالجة صريحة للأخطاء ويحسن الموثوقية من خلال منع الأعطال الصامتة، مما يجعل Swift تطبيقات أكثر قوة وسهولة في الصيانة.
17) ما هو حقن التبعية في Swiftولماذا هو مهم؟
يُعدّ حقن التبعية (DI) نمط تصميم حيث يتلقى الكائن تبعياته من مصدر خارجي بدلاً من إنشائها داخلياً. Swiftتعمل تقنية حقن التبعية (DI) على تحسين قابلية التجزئة والاختبار ومرونة الكود.
تشمل أنواع حقن التبعية ما يلي:
- حقن المُنشئ
- حقن الملكية
- طريقة الحقن
على سبيل المثال:
class NetworkService { }
class ViewModel {
let service: NetworkService
init(service: NetworkService) {
self.service = service
}
}
من خلال حقن التبعيات، يستطيع المطورون استبدال التطبيقات بسهولة، مثل الخدمات الوهمية أثناء الاختبار، دون تغيير المنطق الأساسي. يُستخدم حقن التبعيات على نطاق واسع في التطبيقات القابلة للتوسع. Swift التطبيقات.
18) اشرح مزايا وعيوب استخدام الدوال المغلقة في Swift.
تُعدّ عمليات الإغلاق أدوات فعّالة في Swiftلكنها تأتي مع فوائد وعيوب.
| المزايا | عيوب |
|---|---|
| بناء جملة موجز | قد يقلل من سهولة القراءة |
| يُمكّن من استخدام ردود الاتصال غير المتزامنة | خطر الاحتفاظ بالدورات |
| يلتقط السياق | تعقيد تصحيح الأخطاء |
| البرمجة الوظيفية | الإفراط في الاستخدام قد يُربك التدفق |
تُستخدم الدوال المغلقة عادةً لمعالجة الإكمال، والرسوم المتحركة، والتحويلات الوظيفية. مع ذلك، قد يؤدي استخدامها غير السليم، خاصةً مع عمليات التقاط المراجع القوية، إلى تسرب الذاكرة. [weak self] or [unowned self] يخفف من هذا الخطر.
ينبغي استخدام عبارات الإغلاق بعناية لتحقيق التوازن بين التعبيرية وسهولة الصيانة.
19) ما الفرق بين المراجع الضعيفة والمراجع غير المملوكة في Swift?
يبلغ قطر كلاً من weak و unowned تُستخدم المراجع لمنع دورات الاحتفاظ في إطار برنامج ARC. والفرق الرئيسي يكمن في كيفية تعاملهم مع إلغاء التخصيص.
| البعد | ضعيف | غير مملوك |
|---|---|---|
| اختياري | نعم | لا |
| تم ضبطه على لا شيء | تلقائيا | لا |
| سلامة | أكثر أمانا | قد يكون استخدامه محفوفاً بالمخاطر إذا أسيء استخدامه |
| حالة الاستخدام | من الوفود | ضمان مدى الحياة |
على سبيل المثال:
weak var delegate: SomeDelegate?
weak يُفضل استخدامه عندما يكون الكائن المشار إليه قد يصبح فارغًا. unowned ينبغي استخدامها فقط عندما تكون دورة الحياة مضمونة، مثل علاقات الأبوة والأمومة.
20) كيف يعمل التزامن في Swift هل تستخدم GCD و async/await؟
Swift يدعم التزامن من خلال جراند سنترال ديسباتش (GCD) والأحدث غير متزامن/انتظار يستخدم نموذج GCD قوائم الانتظار لإدارة المهام الخلفية، بينما يوفر async/await نهجًا أكثر قابلية للقراءة وهيكلة للتزامن.
مثال (async/await):
func fetchData() async throws -> String {
return "Data loaded"
}
تُزيل تقنية Async/await تداخل الاستدعاءات، وتُحسّن من سهولة قراءة الكود، وتقلل من احتمالية حدوث أخطاء فيه. لا يزال GCD مفيدًا لإدارة المهام على مستوى منخفض، ولكن التقنيات الحديثة Swift يتزايد تفضيل التطوير للتزامن المنظم.
21) ما هي مستويات التحكم في الوصول في Swiftولماذا هي مهمة؟
التحكم في الوصول في Swift يُقيّد هذا النظام كيفية الوصول إلى عناصر الكود، مثل الفئات والأساليب والخصائص والمتغيرات، من أجزاء مختلفة من البرنامج. وهو ميزة أساسية لبناء تطبيقات آمنة وقابلة للصيانة وذات بنية معيارية. Swift ويوفر خمسة مستويات للتحكم في الوصول التي تحدد نطاق الرؤية.
| مستوى الوصول | مجال |
|---|---|
open |
وحدة خارجية قابلة للوصول والتصنيف الفرعي |
public |
وحدة خارجية يمكن الوصول إليها |
internal |
الوضع الافتراضي، يمكن الوصول إليه داخل الوحدة النمطية |
fileprivate |
يمكن الوصول إليها داخل نفس الملف |
private |
يمكن الوصول إليها ضمن نفس الإعلان |
تمنع آلية التحكم في الوصول الاستخدام غير المقصود للمنطق الداخلي وتفرض حدودًا معمارية. على سبيل المثال، وضع علامة على طرق المساعدة كـ private يضمن ذلك عدم إساءة استخدامها من قبل جهات خارجية. يصبح هذا الأمر بالغ الأهمية في قواعد البيانات والأطر البرمجية الكبيرة.
22) اشرح الفرق بين مُعدِّلات الوصول المفتوح ومُعدِّلات الوصول العام في Swift.
بالرغم ان open و public رغم تشابههما ظاهريًا، إلا أنهما يختلفان اختلافًا كبيرًا عند التعامل مع التوريث وتجاوز السلوك. يسمح كلاهما بالوصول من خارج الوحدة المُعرِّفة، لكن Open فقط هو الذي يسمح بالوراثة وتجاوز الأساليب من خارج الوحدة.
| الميزات | جاكيت | جمهور |
|---|---|---|
| وحدة خارجية يمكن الوصول إليها | نعم | نعم |
| وحدة فرعية قابلة للتصنيف الخارجي | نعم | لا |
| وحدة خارجية قابلة للتجاوز | نعم | لا |
مثال على حالة الاستخدام: يستخدم مطورو الأطر البرمجية public عندما يرغبون في عرض الوظائف ولكن يمنعون التخصيص. open يُستخدم هذا عندما يكون الهدف هو قابلية التوسع، مثل أطر عمل واجهة المستخدم التي تسمح بتخصيص الفئات الفرعية.
هذا التمييز يسمح Swift لتحقيق التوازن بين السلامة وقابلية التوسع في تصميم واجهة برمجة التطبيقات (API).
23) ما هي التهيئة الكسولة في Swiftومتى ينبغي استخدامه؟
يؤدي التهيئة الكسولة إلى تأخير إنشاء خاصية ما حتى يتم الوصول إليها لأول مرة. Swiftويتحقق ذلك باستخدام lazy تُستخدم هذه الكلمة المفتاحية بشكل شائع لتحسين الأداء وتقليل استخدام الذاكرة غير الضروري.
على سبيل المثال:
class DataManager {
lazy var dataSource = loadData()
func loadData() -> [String] {
return ["A", "B", "C"]
}
}
تُعدّ الخصائص الكسولة مفيدة بشكل خاص عندما تكون عملية التهيئة مكلفة، مثل تحميل الملفات أو طلبات الشبكة أو اتصالات قواعد البيانات. ويجب دائمًا تعريفها كمتغيرات (var) لأن قيمتها تُحدد بعد التهيئة.
يؤدي التهيئة الكسولة إلى تحسين أداء بدء التشغيل وكفاءة استخدام الموارد عند استخدامها بشكل مناسب.
24) ما هي الامتدادات في Swiftوما المشاكل التي تحلها؟
تتيح الإضافات للمطورين إضافة وظائف جديدة إلى الأنواع الموجودة دون تعديل تنفيذها الأصلي. Swift يمكن للامتدادات إضافة طرق وخصائص محسوبة وتوافق البروتوكول وأنواع متداخلة.
على سبيل المثال:
extension Int {
func squared() -> Int {
return self * self
}
}
تساهم الإضافات في تنظيم الكود بشكل أنظف من خلال المجموعاتping الوظائف ذات الصلة. وهي مفيدة بشكل خاص عند مطابقة الأنواع مع البروتوكولات أو إضافة طرق مساعدة. على عكس الفئات الفرعية، لا تدعم الامتدادات الخصائص المخزنة، مما يحافظ على سلامة الذاكرة.
تساعد الإضافات في الحفاظ على الكود معياري وقابل للقراءة والصيانة، خاصة في المشاريع الكبيرة.
25) اشرح الفرق بين الطرق الثابتة وطرق الفئات في Swift.
يبلغ قطر كلاً من static و class تحدد الكلمات المفتاحية أساليب على مستوى النوع، لكن سلوكها يختلف في سيناريوهات الوراثة.
| البحث عن كلمة | يمكن تجاوزها | الأستعمال |
|---|---|---|
| ساكن | لا | التنفيذ الثابت |
| فئة | نعم | مصمم للتصنيف الفرعي |
على سبيل المثال:
class Vehicle {
class func type() -> String {
return "Vehicle"
}
}
استعمل static عندما يجب أن يظل السلوك دون تغيير عبر الفئات الفرعية. استخدم class عندما يكون تعدد الأشكال مطلوبًا. هذا التمييز مهم في تصميم الأطر البرمجية وواجهات برمجة التطبيقات حيث تكون قرارات قابلية التوسع مهمة.
26) ما هي الدوال ذات الرتبة العليا في Swiftأجب مع ذكر أمثلة.
الدوال ذات الرتبة العليا هي دوال تقبل دوال أخرى كمعاملات أو تعيد دوالاً كنتائج. Swift يدعم هذا المفهوم بقوة من خلال عمليات الإغلاق وطرق التجميع.
تشمل الدوال الشائعة من الرتبة العليا ما يلي:
mapfilterreducecompactMapflatMap
على سبيل المثال:
let values = [1, 2, 3, 4]
let doubled = values.map { $0 * 2 }
تُحسّن الدوال ذات الرتبة العليا من قدرة الكود على التعبير وتُقلل من الشيفرة النمطية الإجرائية. وهي تُستخدم على نطاق واسع في البرمجة الوظيفية، وتُعدّ أساسية لكتابة كود نظيف وواضح. Swift رمز.
27) ما هي دورة الاحتفاظ، وكيف يمكن منعها؟ Swift?
تحدث دورة الاحتفاظ عندما يحتفظ مثيلان أو أكثر من فئة ما بمراجع قوية لبعضهما البعض، مما يمنع ARC من تحريرها. وينتج عن ذلك تسرب في الذاكرة.
السيناريو الشائع:
عمليات الإغلاق التي تستحوذ على self بقوة داخل الفصول الدراسية.
تقنيات الوقاية:
- استعمل
weakالمراجع - استعمل
unownedالمراجع - التقاط القوائم في عمليات الإغلاق
على سبيل المثال:
someClosure = { [weak self] in
self?.doSomething()
}
يُعد فهم دورات الاحتفاظ أمرًا ضروريًا لبناء تطبيقات iOS فعالة من حيث استخدام الذاكرة، لا سيما عند العمل مع الإغلاقات والمفوضين.
28) اشرح الفرق بين التعليمات البرمجية المتزامنة وغير المتزامنة في Swift.
Syncيقوم الكود المتزامن بحظر التنفيذ حتى تكتمل المهمة، بينما يسمح الكود غير المتزامن باستمرار التنفيذ أثناء تشغيل المهمة في الخلفية.
| البعد | Syncكرون | غير متزامن |
|---|---|---|
| التنفيذ | حجب | غير مؤمن |
| هاملت | واجهة مستخدم أبطأ | واجهة المستخدم المتجاوبة |
| حالة الاستخدام | مهام بسيطة | مكالمات الشبكة |
Swift يتعامل مع البرمجة غير المتزامنة باستخدام GCD, معالجات الإكمالو غير متزامن/انتظاريُعدّ الكود غير المتزامن أمراً بالغ الأهمية للحفاظ على تجربة مستخدم سلسة في تطبيقات العالم الحقيقي.
29) ما هو مصطلح "قابل للترميز" في Swiftولماذا هو مفيد؟
Codable هو بروتوكول يُمكّن من ترميز وفك ترميز البيانات بسهولة بين Swift يجمع بين الكائنات والتمثيلات الخارجية مثل JSON أو قوائم الخصائص. Encodable و Decodable.
على سبيل المثال:
struct User: Codable {
let id: Int
let name: String
}
يُقلل Codable من التعليمات البرمجية المتكررة ويُحسّن الموثوقية عند التعامل مع واجهات برمجة التطبيقات (APIs). كما يضمن سلامة الأنواع ويتكامل بسلاسة مع Swiftالمكتبة القياسية، مما يجعلها الحل المفضل لتسلسل البيانات.
30) ما هي الاختلافات الرئيسية بين المصفوفة والمجموعة والقاموس في Swift?
Swift يوفر ثلاثة أنواع أساسية من المجموعات، كل منها مُحسَّن لحالات استخدام مختلفة.
| التشكيلات | أمر | قيم فريدة | يعتمد على المفتاح |
|---|---|---|---|
| مجموعة | نعم | لا | لا |
| بكج | لا | نعم | لا |
| قاموس | لا | مفاتيح فريدة | نعم |
يؤدي اختيار المجموعة الصحيحة إلى تحسين الأداء والوضوح. تُعد المصفوفات الأنسب للبيانات المرتبة، والمجموعات للبيانات الفريدة، والقواميس لعمليات البحث السريعة القائمة على المفاتيح.
31) ما هي البرمجة الموجهة بالبروتوكول في Swiftولماذا يُفضّل على الميراث؟
تُعد البرمجة الموجهة بالبروتوكولات (POP) فلسفة تصميم أساسية في Swift يركز هذا النهج على تعريف السلوك باستخدام البروتوكولات بدلاً من الاعتماد بشكل كبير على وراثة الفئات. في POP، تحدد البروتوكولات ما يمكن أن يفعله نوع معين، وتوفر امتدادات البروتوكولات تطبيقات افتراضية. يتجنب هذا النهج العديد من المشاكل المرتبطة بتسلسلات الوراثة العميقة، مثل الترابط الوثيق وهشاشة الفئات الأساسية.
يدعم POP الهياكل، والتعدادات، والفئات، مما يجعله أكثر مرونة من الوراثة الموجهة للكائنات. كما أنه يشجع على التركيب بدلاً من الوراثة، مما يحسن قابلية الاختبار والتوسع.
على سبيل المثال: Swiftأنواع المكتبة القياسية مثل Array و Dictionary الاعتماد بشكل كبير على بروتوكولات مثل Sequence و Collection، مما يوضح كيف يُمكّن POP من إعادة استخدام السلوك المتسق عبر أنواع غير ذات صلة.
32) اشرح الفرق بين أنماط التفويض والإشعارات في نظام iOS باستخدام Swift.
يُعدّ التفويض والإشعار نمطين شائعين للتواصل في تطوير تطبيقات iOS. يُنشئ التفويض... واحد الى واحد علاقةٌ يتواصل فيها كائنٌ مع آخر عبر بروتوكول. وتتبع الإشعارات... واحد لكثير نموذج يسمح لعدة مراقبين بالاستماع إلى الأحداث.
| البعد | وفد | اشعارات |
|---|---|---|
| علاقة | واحد لواحد | واحد لكثير |
| اقتران | تايت | فضفاض |
| هاملت | أسرع | أبطأ قليلا |
| حالة الاستخدام | إجراءات المستخدم | الأحداث العالمية |
يُعد التفويض مثاليًا للتعامل مع تفاعلات المستخدم، بينما تُعد الإشعارات أنسب لبث التغييرات على مستوى النظام مثل مظهر لوحة المفاتيح.
33) ما الفرق بين الإطار والحدود في Swift تطوير واجهات المستخدم؟
frame و bounds تحديد حجم وموضع العرض، ولكن في أنظمة إحداثيات مختلفة. frame وهو نسبي إلى العرض الرئيسي، بينما bounds الأمر نسبي بالنسبة للمنظر نفسه.
| الممتلكات | هيكل | حدود |
|---|---|---|
| نظام الإحداثيات | عرض الوالدين | وجهة نظر شخصية |
| يشمل المنصب | نعم | لا |
| يتأثر بالتحولات | نعم | لا |
يُعد فهم هذا التمييز أمرًا بالغ الأهمية عند إجراء عمليات الرسوم المتحركة أو التحويلات أو عمليات الرسم المخصصة.
34) كيف تعمل خاصية التخطيط التلقائي في Swiftوما هي القيود؟
نظام التخطيط التلقائي هو نظام تخطيط يحسب أحجام ومواقع العناصر المعروضة ديناميكيًا بناءً على قيود معينة. تحدد هذه القيود العلاقات بين عناصر واجهة المستخدم، مثل التباعد والمحاذاة ونسب الأحجام.
تُكيّف ميزة التخطيط التلقائي التخطيطات مع أحجام الشاشات المختلفة، واتجاهاتها، وإعدادات إمكانية الوصول. ويمكن تحديد القيود باستخدام أداة إنشاء الواجهات، أو نقاط الارتكاز، أو برمجيًا.
على سبيل المثال:
view.leadingAnchor.constraint(equalTo: parent.leadingAnchor).isActive = true
تضمن خاصية التخطيط التلقائي تصميم واجهة مستخدم سريعة الاستجابة وقابلة للتكيف، وهو أمر ضروري لتطبيقات iOS الحديثة.
35) ما هي قيود الأنواع العامة في Swiftأجب مع ذكر أمثلة.
تُقيّد القيود العامة الأنواع التي يمكن استخدامها مع الأنواع العامة، مما يُحسّن سلامة الأنواع. قد تتطلب هذه القيود أن يتوافق نوع ما مع بروتوكول معين أو أن يرث من فئة محددة.
على سبيل المثال:
func printValues<T: Comparable>(_ a: T, _ b: T) {
print(max(a, b))
}
تُعد القيود العامة ضرورية لكتابة قواعد قابلة لإعادة الاستخدام ولكنها مضبوطةtracتتيح هذه الأدوات للمطورين فرض متطلبات السلوك مع الحفاظ على المرونة.
36) اشرح الفرق بين النسخ، والقوي، والضعيف في Swift إدارة الذاكرة.
تحدد هذه الكلمات الرئيسية كيفية إدارة المراجع في إطار نظام إدارة المراجع (ARC).
| الرقم المرجعي | الاحتفاظ بالعدد | الحلول المقترحة |
|---|---|---|
| قوي | الزيادات | الملكية الافتراضية |
| ضعيف | لا زيادة | تجنب دورات الاحتفاظ |
| نسخة | يُنشئ جديد | عزل القيمة |
copy يُستخدم عادةً مع المجموعات أو السلاسل النصية لضمان عدم قابليتها للتغيير، بينما weak يُعدّ هذا الأمر ضروريًا لأنماط التفويض.
37) ما هو تبديل الأساليب في Swiftومتى يجب تجنبه؟
يُعدّ تغيير طريقة تنفيذ الدوال أسلوبًا يُستخدم أثناء التشغيل لتغيير تنفيذ دالة موجودة. ورغم فعاليته، إلا أنه خطير وغير مستحسن في Swift لأنه يتجاوز إجراءات السلامة أثناء الترجمة.
قد يؤدي التبديل السريع بين الملفات إلى سلوك غير متوقع، وتعطيل تحديثات النظام، وتعقيد عملية تصحيح الأخطاء. لذا، ينبغي استخدامه فقط في سيناريوهات محددة مثل أطر التحليلات أو تصحيح الأخطاء.
Swiftإن تركيز الشركة على السلامة والشحن الثابت يجعل من خلط السجائر ملاذاً أخيراً.
38) كيف Swift كيفية التعامل مع سلامة الخيوط وتضارب البيانات؟
Swift يتعامل مع التزامن باستخدام القاسم المشترك الأكبر، والأقفال، والتقنيات الحديثة Swift نموذج التزامنتُعدّ العناصر الفاعلة ميزة رئيسية توفر عزل البيانات من خلال ضمان إمكانية وصول مهمة واحدة فقط إلى الحالة القابلة للتغيير في كل مرة.
على سبيل المثال:
actor Counter {
var value = 0
func increment() {
value += 1
}
}
تعمل العناصر الفاعلة على تبسيط سلامة الخيوط وتقليل احتمالية حدوث تضارب في البيانات، مما يجعل البرمجة المتزامنة أكثر أمانًا وأسهل في التعامل معها.
39) ما الفرق بين @escaping وغير الهروبping عمليات الإغلاق في Swift?
الإغلاقات غير قابلة للإلغاءping بشكل افتراضي، أي أنها تُنفذ ضمن نطاق الدالة. إسكاping تستمر الدوال المغلقة بعد انتهاء استدعاء الدالة، ويجب وضع علامة عليها صراحةً باستخدام @escaping.
| البعد | غير إسكاping | هيئة الأوراق الماليةping |
|---|---|---|
| حياة | قصير | طويل |
| هاملت | أسرع | ارتفاع طفيف |
| حالة الاستخدام | المنطق المباشر | ردود الاتصال غير المتزامنة |
فهم الهروبping تُعد عمليات الإغلاق بالغة الأهمية لإدارة الذاكرة وتجنب دورات الاحتفاظ.
40) ما هي مزايا وعيوب استخدام Swiftمقارنة واجهة المستخدم بواجهة المستخدم UIKit؟
SwiftUI هو إطار عمل واجهة مستخدم تصريحي قدمته شركة Apple، بينما UIKit هو إطار عمل إلزامي.
| Swiftمزايا واجهة المستخدم | Swiftعيوب واجهة المستخدم |
|---|---|
| Less لوحة مرجعية | دعم محدود للإصدارات السابقة |
| المعاينات الحية | Less ناضج |
| بناء الجملة التصريحي | عدد أقل من نقاط التخصيص |
Swiftتُسرّع واجهة المستخدم عملية التطوير، لكن UIKit لا يزال ضروريًا للتطبيقات المعقدة أو القديمة. وتستخدم العديد من تطبيقات الإنتاج نهجًا هجينًا.
🔍 أعلى Swift أسئلة المقابلة مع سيناريوهات واقعية واستجابات استراتيجية
1) ما هي السمات الرئيسية لـ Swift ما الذي يميزها عن لغة Objective-C؟
المتوقع من المرشح: يريد المحاور تقييم فهمك لـ Swift الأساسيات وسبب تفضيلها لتطوير تطبيقات iOS الحديثة.
مثال للإجابة: Swift توفر لغة Objective-C أمانًا قويًا للأنواع، وخيارات لمنع أخطاء المراجع الفارغة، وإدارة تلقائية للذاكرة عبر ARC، وقابلية قراءة محسّنة بفضل بناء جملة نظيف. كما توفر ميزات قوية مثل أنواع القيم، والبرمجة الموجهة نحو البروتوكولات، ومطابقة الأنماط، مما يجعل التطبيقات أكثر أمانًا وأسهل صيانةً مقارنةً بلغة Objective-C.
2) هل يمكنك شرح الفرق بين أنواع القيم وأنواع المراجع في Swift?
المتوقع من المرشح: يختبر المُحاور فهمك لإدارة الذاكرة وسلوك البيانات في Swift.
مثال للإجابة: تُنسخ أنواع القيم، مثل البنى والتعدادات، عند إسنادها أو تمريرها، مما يضمن عزل البيانات. أما أنواع المراجع، مثل الأصناف، فتتشارك نفس مرجع الذاكرة، ما يعني أن التغييرات في مكان واحد تؤثر على جميع المراجع. ويعتمد الاختيار بينهما على ما إذا كانت هناك حاجة إلى حالة قابلة للتغيير مشتركة.
3) كيف تعمل الخيارات في Swiftولماذا هي مهمة؟
المتوقع من المرشح: يريد القائم بالمقابلة معرفة كيف تتعامل مع القيم الفارغة بأمان وتتجنب الأعطال أثناء التشغيل.
مثال للإجابة: تمثل القيم الاختيارية وجود قيمة أو عدم وجودها. وهي مهمة لأنها تجبر المطورين على التعامل مع حالات القيمة الفارغة (nil) بشكل صريح باستخدام الربط الاختياري، أو التسلسل الاختياري، أو عبارات الحماية. يقلل هذا التصميم بشكل كبير من الأعطال غير المتوقعة ويحسن استقرار التطبيق.
4) صف موقفًا استخدمت فيه البرمجة الموجهة بالبروتوكولات في Swift.
المتوقع من المرشح: يريد القائم بالمقابلة أن يرى كيف تطبق مهاراتك المتقدمة Swift المفاهيم في مشاريع حقيقية.
مثال للإجابة: في وظيفتي السابقة، استخدمت البرمجة الموجهة بالبروتوكولات لتحديد السلوك المشترك عبر نماذج عرض متعددة. وباستخدام البروتوكولات مع التطبيقات الافتراضية، قللت من تكرار التعليمات البرمجية وحسّنت قابلية الاختبار مع الحفاظ علىping مكونات مترابطة بشكل غير محكم.
5) كيف تدير الذاكرة بفعالية في Swift التطبيقات؟
المتوقع من المرشح: يقوم القائم بالمقابلة بتقييم فهمك لـ ARC واعتبارات الأداء.
مثال للإجابة: في وظيفة سابقة، كنتُ أدير الذاكرة بعناية فائقة من خلال استخدام المراجع الضعيفة وغير المملوكة لتجنب دورات الاحتفاظ، لا سيما في الدوال المغلقة وأنماط التفويض. كما استخدمتُ أداة Instruments لتحديد تسريبات الذاكرة والتأكد من تحرير وحدات التحكم في العرض بشكل صحيح.
6) كيف تتعامل مع العمليات غير المتزامنة في Swift?
المتوقع من المرشح: يريد القائم بالمقابلة معرفة كيف تدير التزامن والاستجابة في التطبيقات.
مثال للإجابة: أتعامل مع العمليات غير المتزامنة باستخدام نظام Grand Central Dispatch و Swift ميزات التزامن مثل async و await. تُمكّنني هذه الأدوات من الحفاظ على استجابة واجهة المستخدم أثناء تنفيذ مهام في الخلفية مثل استدعاءات الشبكة أو معالجة البيانات.
7) صف خطأً برمجياً صعباً واجهته في Swift المشروع وكيف قمت بحله.
المتوقع من المرشح: يقوم القائم بالمقابلة بتقييم أسلوبك في حل المشكلات ومهاراتك في تصحيح الأخطاء.
مثال للإجابة: في وظيفتي السابقة، واجهتُ عطلاً ناتجاً عن عملية فك التغليف القسري.ping حدث خطأ أثناء استجابة الشبكة. قمت بحل المشكلة عن طريق إضافة ربط اختياري مناسب وإضافة فحوصات وقائية، مما أدى إلى القضاء على العطل وتحسين معالجة الأخطاء في جميع أنحاء الوحدة.
8) كيف تضمن جودة الكود وسهولة صيانته في Swift المشاريع؟
المتوقع من المرشح: يرغب القائم بالمقابلة في الحصول على نظرة ثاقبة حول تخصصك في التطوير وممارساتك في العمل الجماعي.
مثال للإجابة: أضمن جودة الكود باتباع ما يلي: Swift أعتمد على إرشادات الأسلوب، وكتابة التعليمات البرمجية المعيارية، واستخدام اصطلاحات تسمية ذات دلالة. كما أعتمد على مراجعات التعليمات البرمجية، واختبارات الوحدات، والتوثيق لضمان بقاء قاعدة التعليمات البرمجية قابلة للصيانة والفهم من قبل جميع أعضاء الفريق.
9) كيف ستتعامل مع موقف يجب فيه تسليم ميزة ما بسرعة ولكن المتطلبات غير واضحة؟
المتوقع من المرشح: يرغب القائم بالمقابلة في تقييم مهاراتك في التواصل واتخاذ القرارات تحت الضغط.
مثال للإجابة: سأبدأ بتوضيح المتطلبات الأساسية مع أصحاب المصلحة وتحديد الحد الأدنى من الوظائف الأساسية. ثم سأوضح الافتراضات بوضوح، وأنفذ الميزة بشكل تدريجي، مع الحفاظ على المرونة لدمج الملاحظات والالتزام بالموعد النهائي.
10) ما الذي يحفزك على العمل مع Swift وتطوير تطبيقات iOS؟
المتوقع من المرشح: يريد القائم بالمقابلة أن يفهم شغفك واهتمامك طويل الأمد بالتكنولوجيا.
مثال للإجابة: في وظيفتي الأخيرة، كنتُ مدفوعاً بـ Swiftيركز هذا العمل على السلامة والأداء وتصميم اللغات الحديثة. إن بناء تطبيقات تؤثر بشكل مباشر على المستخدمين، مع العمل ضمن بيئة متطورة باستمرار، يبقيني متحمسًا ومتشوقًا للنمو كمطور.
