स्विफ्ट इंटरव्यू कैसे पास करें: शीर्ष प्रश्न
iOS डेवलपर पद के लिए नौकरी का इंटरव्यू केवल फ्रेमवर्क के ज्ञान की परीक्षा नहीं है, बल्कि स्विफ्ट भाषा की गहरी समझ की भी परीक्षा है। नियोक्ता ऐसे उम्मीदवार को देखना चाहते हैं जो मेमोरी प्रबंधन, कंकरेंसी और सिंटैक्स विशिष्टताओं को समझता हो। इस लेख में, हमने इंटरव्यू में अक्सर पूछे जाने वाले शीर्ष प्रश्नों को विस्तृत उत्तर और कोड उदाहरणों के साथ एकत्र किया है। यह लेख जूनियर्स और अनुभवी डेवलपर्स दोनों के लिए उपयोगी होगा जो इंटरव्यू से पहले अपने ज्ञान को ताज़ा करना चाहते हैं।
1. स्विफ्ट बेसिक्स: प्रकार, ऑप्शनल और मेमोरी प्रबंधन
बुनियादी प्रश्न यह परीक्षण करते हैं कि आप भाषा की मूलभूत अवधारणाओं को कितनी अच्छी तरह समझते हैं। चलिए सबसे लोकप्रिय प्रश्न से शुरू करते हैं — ऑप्शनल।
प्रश्न 1: ऑप्शनल क्या हैं और उनकी आवश्यकता क्यों है?
उत्तर: ऑप्शनल एक प्रकार सुरक्षा तंत्र है जो एक वेरिएबल को या तो मान रखने या nil (मान की अनुपस्थिति) होने की अनुमति देता है। वे अन्य भाषाओं में सामान्य नल पॉइंटर्स की समस्या को हल करते हैं।
// Declaring an optionalvar name: String? = "Anna"name = nil // now the variable contains no value
// Safe unwrapping (optional binding)if let unwrappedName = name { print("Hello, \\(unwrappedName)")} else { print("Name is missing")}
// Force unwrapping — dangerous!// let forcedName = name! // crash if name == nilप्रश्न 2: struct और class में क्या अंतर है?
उत्तर: struct एक मान प्रकार (value type) है, जबकि class एक संदर्भ प्रकार (reference type) है। असाइन करने पर स्ट्रक्चर कॉपी होते हैं, क्लास संदर्भ द्वारा पास होते हैं। इसके अतिरिक्त, क्लास इनहेरिटेंस का समर्थन करते हैं, जबकि स्ट्रक्चर नहीं करते।
struct Point { var x: Int var y: Int}
class Person { var name: String init(name: String) { self.name = name }}
var pointA = Point(x: 1, y: 2)var pointB = pointA // copypointB.x = 10print(pointA.x) // 1 — original unchanged
var personA = Person(name: "Ivan")var personB = personA // reference to the same objectpersonB.name = "Peter"print(personA.name) // "Peter" — changedप्रश्न 3: ऑटोमैटिक रेफरेंस काउंटिंग (ARC) कैसे काम करती है?
उत्तर: ARC स्वचालित रूप से एक क्लास ऑब्जेक्ट के लिए मजबूत संदर्भों (strong references) की संख्या गिनता है। जब काउंटर शून्य तक पहुँचता है, तो ऑब्जेक्ट मेमोरी से डीलोकेट हो जाता है। चक्रीय संदर्भों (retain cycles) से समस्याएँ उत्पन्न होती हैं, जिन्हें weak या unowned संदर्भों का उपयोग करके हल किया जाता है।
class Parent { var child: Child?}
class Child { weak var parent: Parent? // weak prevents retain cycle}
var parent: Parent? = Parent()var child: Child? = Child()parent?.child = childchild?.parent = parent2. उन्नत अवधारणाएँ: क्लोजर, प्रोटोकॉल और जेनेरिक्स
अगले चरण में, इंटरव्यूअर जाँचता है कि क्या आप स्विफ्ट की कार्यात्मक क्षमताओं का उपयोग कर सकते हैं।
प्रश्न 4: क्लोजर क्या हैं और वे मानों को कैसे कैप्चर करते हैं?
उत्तर: क्लोजर कोड का एक ब्लॉक है जिसे चारों ओर पास किया जा सकता है और फ़ंक्शन की तरह उपयोग किया जा सकता है। यह आसपास के संदर्भ से वेरिएबल्स को कैप्चर करता है। कैप्चर मजबूत (strong) या कमजोर (weak) हो सकता है।
func makeIncrementer(incrementAmount: Int) -> () -> Int { var total = 0 let incrementer: () -> Int = { total += incrementAmount // capturing total return total } return incrementer}
let incrementByTwo = makeIncrementer(incrementAmount: 2)print(incrementByTwo()) // 2print(incrementByTwo()) // 4प्रश्न 5: प्रोटोकॉल और एब्सट्रैक्ट क्लास में क्या अंतर है?
उत्तर: स्विफ्ट में कोई एब्सट्रैक्ट क्लास नहीं हैं। एक प्रोटोकॉल एक अनुबंध (आवश्यकताएँ) को परिभाषित करता है जिसे क्लास, स्ट्रक्चर या एनम द्वारा लागू किया जाना चाहिए।