Swift में Enum — यह क्या है, सिंटैक्स और उपयोग

लेखक: IT Sectr प्रकाशित: 2026-06-17 पढ़ने का समय: 6 मिनट

Enum Swift में एक प्रकार है जो संबंधित मानों के समूह को एक नाम के तहत एकीकृत करता है। C और Objective-C के विपरीत, जहाँ enum केवल पूर्णांक स्थिरांकों का एक सेट है, Swift first-class एनुमरेशन प्रदान करता है जिसमें associated values, raw values, विधियाँ और प्रोटोकॉल समर्थन शामिल हैं। Apple, 2026 के अनुसार, enum iOS विकास में टाइप-सेफ स्थिति मॉडलिंग के प्रमुख उपकरणों में से एक है।

मुख्य बिंदु

  • Enum — संबंधित मानों के समूह के लिए एक प्रकार, टाइप सुरक्षा सुनिश्चित करता है
  • Raw Values — सभी एनुम केस के लिए समान प्रकार के मान निर्दिष्ट
  • Associated Values — प्रत्येक केस से व्यक्तिगत रूप से जुड़े विभिन्न डेटा प्रकार
  • केस कीवर्ड case से घोषित होते हैं और विधियाँ रख सकते हैं
  • Switch के साथ enum के लिए कंपाइलर द्वारा सभी विकल्पों की अनिवार्य जाँच

Swift में Enum क्या है?

Enum (एनुमरेशन) एक कस्टम डेटा प्रकार है जो परस्पर अनन्य विकल्पों के एक सीमित सेट को एकीकृत करता है। Swift में, enum केवल संख्यात्मक स्थिरांक नहीं है, बल्कि अपने स्वयं के तर्क के साथ एक पूर्ण प्रकार है।

एनुमरेशन के प्रत्येक विकल्प को केस कहा जाता है। Objective-C के विपरीत, जहाँ enum एक पूर्णांक प्रकार तक सीमित है, Swift प्रत्येक केस को अपना डेटा संग्रहीत करने और विधियाँ रखने की अनुमति देता है।

Apple के अनुसार, Swift में enum जेनेरिक्स, इनिशियलाइज़र, गणना की गई गुण और प्रोटोकॉल कार्यान्वयन का समर्थन करता है — जो इसे स्थितियों, त्रुटियों, विकल्पों और सीमित अवस्था मशीनों के मॉडलिंग के लिए लागू करने योग्य बनाता है।

Enum का उपयोग वहाँ करें जहाँ आपको परस्पर अनन्य विकल्पों के सीमित सेट को प्रस्तुत करने की आवश्यकता हो: स्क्रीन स्थितियाँ, त्रुटि प्रकार, दिशाएँ, फ़िल्टरिंग विकल्प।

Enum घोषणा का सिंटैक्स

Enum कीवर्ड enum के साथ घोषित किया जाता है, उसके बाद नाम और घुंघराले कोष्ठक में बॉडी होती है।

swift
enum CompassDirection {
    case north
    case south
    case east
    case west
}

केस को एक पंक्ति में अल्पविराम से अलग करके घोषित किया जा सकता है:

swift
enum Planet {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

केस तक पहुँचने के लिए ज्ञात प्रकार के बाद डॉट सिंटैक्स का उपयोग करें:

swift
let direction = CompassDirection.north
// प्रकार ज्ञात है — संक्षिप्त सिंटैक्स उपलब्ध है:
var currentPlanet = .earth

एक बार चर को ज्ञात enum प्रकार निर्दिष्ट होने पर, Swift स्वचालित रूप से प्रकार का अनुमान लगाता है, और केस तक पहुँचने पर एनुमरेशन नाम को छोड़ा जा सकता है।

एनुमरेशन में Raw Values

Raw Values एक ही प्रकार के मान हैं जो प्रत्येक enum केस को निर्दिष्ट किए जाते हैं। Associated values के विपरीत, raw values सभी केस के लिए प्रकार में समान होते हैं और घोषणा के समय निर्धारित किए जाते हैं।

swift
enum HTTPStatusCode: Int {
    case ok = 200
    case notFound = 404
    case internalServerError = 500
}

let code = HTTPStatusCode.notFound
print(code.rawValue) // 404

पूर्णांक raw values के लिए, Swift स्वचालित रूप से मानों को बढ़ाता है यदि केवल पहला स्पष्ट रूप से सेट किया गया हो:

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 से डेटा पार्स करने के लिए सुविधाजनक है।

Enum में Associated Values

Associated Values प्रत्येक enum केस से व्यक्तिगत रूप से अलग-अलग डेटा प्रकार जोड़ने की अनुमति देती हैं। Raw values के विपरीत, associated values प्रकार और मात्रा में भिन्न हो सकती हैं।

swift
enum NetworkError {
    case timeout(seconds: Int)
    case httpError(code: Int, message: String)
    case noConnection
    case unknown(error: Error)
}

Switch के साथ प्रसंस्करण करते समय, associated values चर या स्थिरांक में बाइंडिंग के माध्यम से निकाली जाती हैं:

swift
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 (indirect)

रिकर्सिव Enum — एक एनुमरेशन जिसके केस स्वयं enum प्रकार को संदर्भित करते हैं। ऐसे केस को कीवर्ड indirect से चिह्नित किया जाता है।

swift
indirect enum LinkedList<T> {
    case empty
    case node(value: T, next: LinkedList<T>)
}

indirect को enum से पहले रखने से सभी केस रिकर्सिव चिह्नित हो जाते हैं। वैकल्पिक रूप से, केवल विशिष्ट केस को indirect से चिह्नित किया जा सकता है:

swift
enum ArithmeticExpression {
    case number(Int)
    indirect case addition(ArithmeticExpression, ArithmeticExpression)
    indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}

Swift रिकर्सिव केस को मानों के बजाय संदर्भ (reference semantics) के रूप में संग्रहीत करने के लिए indirect का उपयोग करता है — यह स्टैक पर enum के अनंत आकार से बचाता है। रिकर्सिव enum का व्यापक रूप से ट्री, लिंक्ड लिस्ट और AST के निर्माण में उपयोग किया जाता है।

Enum और प्रोटोकॉल

Enum संरचनाओं और वर्गों की तरह ही प्रोटोकॉल लागू कर सकता है। यह Swift में प्रोटोकॉल-ओरिएंटेड प्रोग्रामिंग की एक प्रमुख क्षमता है।

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 अनुप्रयोगों में एक बहुमुखी निर्माण खंड बनाता है।

अक्सर पूछे जाने वाले प्रश्न

Swift में enum, struct से कैसे अलग है?

Enum परस्पर अनन्य विकल्पों के एक सीमित सेट वाला प्रकार है, जबकि struct गुणों के एक मनमाना सेट वाला प्रकार है। Enum में stored properties नहीं हो सकतीं, लेकिन computed properties और विधियों का समर्थन करता है।

क्या enum में एक साथ raw values और associated values हो सकती हैं?

नहीं, enum में एक साथ raw values और associated_values नहीं हो सकतीं। Raw values सभी केस के लिए एक ही प्रकार के मान हैं, associated_values प्रत्येक केस के लिए व्यक्तिगत डेटा हैं। ये तंत्र परस्पर अनन्य हैं।

Enum के सभी केस की सूची कैसे प्राप्त करें?

CaseIterable प्रोटोकॉल का अनुपालन जोड़ें। Swift स्वचालित रूप से allCases गुण उत्पन्न करेगा, जो घोषणा क्रम में सभी केस का संग्रह लौटाता है। यह सभी विकल्पों पर पुनरावृत्ति के लिए सुविधाजनक है।

क्या enum को संसाधित करने के लिए switch का उपयोग अनिवार्य है?

Switch सबसे सुरक्षित तरीका है क्योंकि कंपाइलर सभी विकल्पों की जाँच करता है। एक केस की जाँच के लिए if case या बिना associated values वाले enum के लिए == का उपयोग किया जा सकता है।

क्या जेनेरिक के साथ enum बनाया जा सकता है?

हाँ, enum जेनेरिक का समर्थन करता है: enum Result<T, E> { case success(T); case failure(E) }. यह सफलता और त्रुटि को संभालने के लिए टाइप-सेफ सामान्यीकृत निर्माण बनाने की अनुमति देता है।

सारांश

  • Enum Swift में विधियों, जेनेरिक और प्रोटोकॉल के समर्थन के साथ एक पूर्ण प्रकार है
  • Raw Values सभी केस के लिए समान प्रकार के मान निर्धारित करने की अनुमति देती हैं
  • Associated Values प्रत्येक केस से अलग-अलग डेटा जोड़ने की क्षमता देती हैं
  • Indirect केस enum में रिकर्सिव संरचनाओं के लिए आवश्यक हैं
  • प्रोटोकॉल को enum द्वारा कार्यान्वित किया जा सकता है — यह Swift में POP का आधार है
  • Switch के साथ enum संकलन स्तर पर सभी मामलों की जाँच सुनिश्चित करता है
  • सीमित स्थितियों और टाइप-सेफ विकल्पों के मॉडलिंग के लिए enum का उपयोग करें

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें