Enum Swift में एक प्रकार है जो संबंधित मानों के समूह को एक नाम के तहत एकीकृत करता है। C और Objective-C के विपरीत, जहाँ enum केवल पूर्णांक स्थिरांकों का एक सेट है, Swift first-class एनुमरेशन प्रदान करता है जिसमें associated values, raw values, विधियाँ और प्रोटोकॉल समर्थन शामिल हैं। Apple, 2026 के अनुसार, enum iOS विकास में टाइप-सेफ स्थिति मॉडलिंग के प्रमुख उपकरणों में से एक है।
मुख्य बिंदु
Enum (एनुमरेशन) एक कस्टम डेटा प्रकार है जो परस्पर अनन्य विकल्पों के एक सीमित सेट को एकीकृत करता है। Swift में, enum केवल संख्यात्मक स्थिरांक नहीं है, बल्कि अपने स्वयं के तर्क के साथ एक पूर्ण प्रकार है।
एनुमरेशन के प्रत्येक विकल्प को केस कहा जाता है। Objective-C के विपरीत, जहाँ enum एक पूर्णांक प्रकार तक सीमित है, Swift प्रत्येक केस को अपना डेटा संग्रहीत करने और विधियाँ रखने की अनुमति देता है।
Apple के अनुसार, Swift में enum जेनेरिक्स, इनिशियलाइज़र, गणना की गई गुण और प्रोटोकॉल कार्यान्वयन का समर्थन करता है — जो इसे स्थितियों, त्रुटियों, विकल्पों और सीमित अवस्था मशीनों के मॉडलिंग के लिए लागू करने योग्य बनाता है।
Enum का उपयोग वहाँ करें जहाँ आपको परस्पर अनन्य विकल्पों के सीमित सेट को प्रस्तुत करने की आवश्यकता हो: स्क्रीन स्थितियाँ, त्रुटि प्रकार, दिशाएँ, फ़िल्टरिंग विकल्प।
Enum कीवर्ड enum के साथ घोषित किया जाता है, उसके बाद नाम और घुंघराले कोष्ठक में बॉडी होती है।
enum CompassDirection {
case north
case south
case east
case west
}
केस को एक पंक्ति में अल्पविराम से अलग करके घोषित किया जा सकता है:
enum Planet {
case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}
केस तक पहुँचने के लिए ज्ञात प्रकार के बाद डॉट सिंटैक्स का उपयोग करें:
let direction = CompassDirection.north
// प्रकार ज्ञात है — संक्षिप्त सिंटैक्स उपलब्ध है:
var currentPlanet = .earth
एक बार चर को ज्ञात enum प्रकार निर्दिष्ट होने पर, Swift स्वचालित रूप से प्रकार का अनुमान लगाता है, और केस तक पहुँचने पर एनुमरेशन नाम को छोड़ा जा सकता है।
Raw Values एक ही प्रकार के मान हैं जो प्रत्येक enum केस को निर्दिष्ट किए जाते हैं। Associated values के विपरीत, raw values सभी केस के लिए प्रकार में समान होते हैं और घोषणा के समय निर्धारित किए जाते हैं।
enum HTTPStatusCode: Int {
case ok = 200
case notFound = 404
case internalServerError = 500
}
let code = HTTPStatusCode.notFound
print(code.rawValue) // 404
पूर्णांक raw values के लिए, Swift स्वचालित रूप से मानों को बढ़ाता है यदि केवल पहला स्पष्ट रूप से सेट किया गया हो:
enum Status: Int {
case pending = 1
case active // 2
case completed // 3
}
Raw values Int, String, Character प्रकार या RawRepresentable प्रोटोकॉल का अनुपालन करने वाले किसी भी प्रकार के हो सकते हैं। Swift स्वचालित रूप से raw value से enum बनाने के लिए इनिशियलाइज़र init? उत्पन्न करता है — यह API से डेटा पार्स करने के लिए सुविधाजनक है।
Associated Values प्रत्येक enum केस से व्यक्तिगत रूप से अलग-अलग डेटा प्रकार जोड़ने की अनुमति देती हैं। Raw values के विपरीत, associated values प्रकार और मात्रा में भिन्न हो सकती हैं।
enum NetworkError {
case timeout(seconds: Int)
case httpError(code: Int, message: String)
case noConnection
case unknown(error: Error)
}
Switch के साथ प्रसंस्करण करते समय, associated values चर या स्थिरांक में बाइंडिंग के माध्यम से निकाली जाती हैं:
let error = NetworkError.httpError(code: 403, message: "Forbidden")
switch error {
case .timeout(let seconds):
print("\(seconds)s के बाद समय समाप्त")
case .httpError(let code, let message):
print("HTTP \(code): \(message)")
case .noConnection:
print("कोई कनेक्शन नहीं")
case .unknown(let err):
print("अज्ञात: \(err.localizedDescription)")
}
Apple दस्तावेज़ीकरण के अनुसार, associated values enum को अलग-अलग रैपर प्रकार बनाए बिना जटिल स्थितियों के मॉडलिंग के लिए एक अभिव्यंजक उपकरण बनाती हैं। Result-जैसे परिदृश्यों और संदर्भ के साथ त्रुटियों के मॉडलिंग के लिए उनका उपयोग करें।
रिकर्सिव Enum — एक एनुमरेशन जिसके केस स्वयं enum प्रकार को संदर्भित करते हैं। ऐसे केस को कीवर्ड indirect से चिह्नित किया जाता है।
indirect enum LinkedList<T> {
case empty
case node(value: T, next: LinkedList<T>)
}
indirect को enum से पहले रखने से सभी केस रिकर्सिव चिह्नित हो जाते हैं। वैकल्पिक रूप से, केवल विशिष्ट केस को indirect से चिह्नित किया जा सकता है:
enum ArithmeticExpression {
case number(Int)
indirect case addition(ArithmeticExpression, ArithmeticExpression)
indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}
Swift रिकर्सिव केस को मानों के बजाय संदर्भ (reference semantics) के रूप में संग्रहीत करने के लिए indirect का उपयोग करता है — यह स्टैक पर enum के अनंत आकार से बचाता है। रिकर्सिव enum का व्यापक रूप से ट्री, लिंक्ड लिस्ट और AST के निर्माण में उपयोग किया जाता है।
Enum संरचनाओं और वर्गों की तरह ही प्रोटोकॉल लागू कर सकता है। यह Swift में प्रोटोकॉल-ओरिएंटेड प्रोग्रामिंग की एक प्रमुख क्षमता है।
protocol Describable {
var description: String { get }
}
enum PaymentMethod: Describable {
case creditCard(last4: String)
case applePay
case bankTransfer
var description: String {
switch self {
case .creditCard(let last4):
return "Card ending in \(last4)"
case .applePay:
return "Apple Pay"
case .bankTransfer:
return "Bank Transfer"
}
}
}
Enum Cocoa प्रोटोकॉल भी लागू कर सकता है — उदाहरण के लिए, CaseIterable सभी केस के संग्रह के स्वचालित निर्माण के लिए, या Codable क्रमांकन के लिए। यह enum को Swift अनुप्रयोगों में एक बहुमुखी निर्माण खंड बनाता है।
अक्सर पूछे जाने वाले प्रश्न
Enum परस्पर अनन्य विकल्पों के एक सीमित सेट वाला प्रकार है, जबकि struct गुणों के एक मनमाना सेट वाला प्रकार है। Enum में stored properties नहीं हो सकतीं, लेकिन computed properties और विधियों का समर्थन करता है।
नहीं, enum में एक साथ raw values और associated_values नहीं हो सकतीं। Raw values सभी केस के लिए एक ही प्रकार के मान हैं, associated_values प्रत्येक केस के लिए व्यक्तिगत डेटा हैं। ये तंत्र परस्पर अनन्य हैं।
CaseIterable प्रोटोकॉल का अनुपालन जोड़ें। Swift स्वचालित रूप से allCases गुण उत्पन्न करेगा, जो घोषणा क्रम में सभी केस का संग्रह लौटाता है। यह सभी विकल्पों पर पुनरावृत्ति के लिए सुविधाजनक है।
Switch सबसे सुरक्षित तरीका है क्योंकि कंपाइलर सभी विकल्पों की जाँच करता है। एक केस की जाँच के लिए if case या बिना associated values वाले enum के लिए == का उपयोग किया जा सकता है।
हाँ, enum जेनेरिक का समर्थन करता है: enum Result<T, E> { case success(T); case failure(E) }. यह सफलता और त्रुटि को संभालने के लिए टाइप-सेफ सामान्यीकृत निर्माण बनाने की अनुमति देता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें