Swift में Associated Values: यह क्या है, सिंटैक्स और उदाहरण

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

Associated Values — एक Swift तंत्र जो प्रत्येक enum केस में अलग-अलग डेटा संलग्न करने की अनुमति देता है। raw values के विपरीत, जहाँ सभी केसों में समान प्रकार के मान होते हैं, associated values प्रत्येक केस के लिए प्रकार और मात्रा में भिन्न हो सकते हैं। Apple Documentation, 2026 के अनुसार, अतिरिक्त रैपर प्रकार बनाए बिना डोमेन को सटीक रूप से मॉडल करने के लिए यह एक महत्वपूर्ण क्षमता है।

मुख्य बातें

  • Associated Values — enum केस से जुड़ा व्यक्तिगत डेटा
  • प्रकार associated values प्रत्येक केस के लिए भिन्न हो सकते हैं
  • निष्कर्षण switch या if case में मान बाइंडिंग के माध्यम से होता है
  • परस्पर अपवर्जन — associated values, raw values के साथ असंगत हैं
  • व्यवहार — त्रुटियों, क्वेरी परिणामों और UI स्थितियों का मॉडलिंग

Associated Values क्या हैं?

Associated Values अतिरिक्त जानकारी है जो एक enum केस अपने साथ संग्रहीत कर सकता है। raw values के विपरीत, जो घोषणा स्तर पर निश्चित होते हैं, associated values enum इंस्टेंस बनाते समय सेट किए जाते हैं।

एक भुगतान विधि मॉडल करने की कल्पना करें: creditCard केस अंतिम 4 अंक और समाप्ति तिथि संग्रहीत कर सकता है, जबकि applePay केस कुछ भी संग्रहीत नहीं करता। associated values के साथ, यह उपवर्गों या वैकल्पिक फ़ील्ड के बिना, स्वाभाविक रूप से कार्यान्वित होता है।

Apple दस्तावेज़ीकरण के अनुसार, associated values enum को स्थिरांकों के एक साधारण सेट से एक बीजगणितीय डेटा प्रकार (sum type) में बदल देते हैं, जो कार्यात्मक भाषाओं की विशेषता है। यह कोड अभिव्यक्ति को महत्वपूर्ण रूप से बढ़ाता है।

Associated values का सिंटैक्स

Associated Values को केस के बाद कोष्ठक में घोषित किया जाता है, जिसमें पैरामीटर नाम और प्रकार निर्दिष्ट होते हैं, जैसे फ़ंक्शन में।

swift
enum MediaFile {
    case image(width: Int, height: Int, format: String)
    case video(duration: Double, codec: String)
    case audio(bitrate: Int)
    case unknown
}

इंस्टेंस बनाते समय, associated values को तर्क के रूप में पास किया जाता है:

swift
let photo = MediaFile.image(width: 1920, height: 1080, format: "jpeg")
let clip = MediaFile.video(duration: 120.5, codec: "h264")

Swift associated values की संख्या या प्रकारों पर प्रतिबंध नहीं लगाता। आप associated values के अंदर जेनेरिक, क्लोजर फ़ंक्शन और अन्य enum का उपयोग कर सकते हैं। यह जटिल नेस्टेड संरचनाओं के निर्माण को संभव बनाता है।

associated values के पैरामीटर नाम इंस्टेंस बनाते समय तर्क लेबल के रूप में उपयोग किए जाते हैं — यह कोड पठनीयता में सुधार करता है। switch के माध्यम से निष्कर्षण करते समय, नाम दस्तावेज़ीकरण के रूप में कार्य करते हैं, प्रत्येक मान का अर्थ स्पष्ट करते हैं। यह दृष्टिकोण कोड को स्व-दस्तावेज़ीकरण बनाता है और डेटा मिलान करते समय त्रुटियों की संभावना को कम करता है। यह बड़े iOS अनुप्रयोगों के टीम विकास में विशेष रूप से मूल्यवान है।

Switch with associated values

Switch associated values निकालने का प्राथमिक तरीका है। मान let या var के माध्यम से स्थिरांक या चर से बंधे होते हैं।

swift
func describe(_ file: MediaFile) -> String {
    switch file {
    case .image(let w, let h, let fmt):
        return "Image \(w)x\(h) .\(fmt)"
    case .video(let duration, let codec):
        return "Video \(duration)s, \(codec)"
    case .audio(let bitrate):
        return "Audio \(bitrate)kbps"
    case .unknown:
        return "Unknown format"
    }
}

Swift आंशिक मिलान का समर्थन करता है — आप associated values के लिए विशिष्ट मान निर्दिष्ट कर सकते हैं:

swift
switch file {
case .image(let w, let h, "png"):
    print("PNG छवि \(w)x\(h)")
case .image(1920, 1080, _):
    print("Full HD छवि")
default:
    break
}

वाइल्डकार्ड (_) का उपयोग अनावश्यक associated values को अनदेखा करने की अनुमति देता है, और केस में स्थिरांक आपको विशिष्ट मानों के साथ मिलान की जांच करने देते हैं।

Associated Values vs Raw Values

कई शुरुआती डेवलपर associated values को raw values के साथ भ्रमित करते हैं। ये अलग-अलग उपयोग मामलों वाले विभिन्न तंत्र हैं।

विशेषताRaw ValuesAssociated Values
डेटा प्रकारसभी केसों के लिए एक प्रकारप्रत्येक केस के लिए अलग-अलग प्रकार
असाइनमेंट समयenum घोषणा परइंस्टेंस निर्माण पर
अनिवार्यतासभी केसों का एक मान होता हैकुछ केसों के बिना मान हो सकते हैं
संगततापरस्पर अपवर्जी — एक साथ उपयोग नहीं किया जा सकता

Swift Evolution के अनुसार, associated values को Swift 2.0 में enum रीडिज़ाइन के भाग के रूप में पेश किया गया था। वे प्रकारों के लिए बीजगणितीय दृष्टिकोण प्रदान करते हैं, जहाँ प्रत्येक केस अपने स्वयं के हस्ताक्षर के साथ एक अलग कंस्ट्रक्टर है।

Associated values के व्यावहारिक उदाहरण

Associated Values वास्तविक iOS परियोजनाओं में सक्रिय रूप से उपयोग किए जाते हैं। आइए तीन विशिष्ट परिदृश्यों पर विचार करें।

API प्रतिक्रियाओं का मॉडलिंग

swift
enum APIResponse<T: Codable> {
    case success(data: T, cached: Bool)
    case failure(error: Error, retryAvailable: Bool)
    case loading(progress: Double)
}

UI स्थिति मशीन

swift
enum ViewState<T> {
    case idle
    case loading(message: String)
    case loaded(data: T)
    case error(message: String, retryAction: () -> Void)
}

associated values के साथ, enum राज्य मशीनों के लिए एक शक्तिशाली उपकरण बन जाता है: प्रत्येक केस एक स्थिति है, associated values उस स्थिति के पैरामीटर हैं। कंपाइलर गारंटी देता है कि सभी संक्रमण संभाले गए हैं।

if case और guard case के माध्यम से निष्कर्षण

switch के बिना एकल केस की जांच करने के लिए, if case या guard case का उपयोग करें। जब आपको केवल एक विकल्प संभालने की आवश्यकता हो तो यह अधिक संक्षिप्त है।

swift
let error = NetworkError.timeout(seconds: 30)

if case .timeout(let seconds) = error {
    print("\(seconds)s के बाद अनुरोध समय समाप्त")
}

guard case .httpError(let code, _) = error else {
    return
}
print("\(code) कोड के साथ HTTP त्रुटि")

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

क्या enum में बिना पैरामीटर के associated values हो सकते हैं?

हाँ, एक केस में associated values नहीं हो सकते — उदाहरण के लिए, case unknown. ऐसे केस बिना अतिरिक्त डेटा के सामान्य enum केस की तरह व्यवहार करते हैं। यह मार्कर स्थितियों के लिए सुविधाजनक है।

associated values वाले दो enum की तुलना कैसे करें?

Swift associated values वाले enum के लिए स्वचालित रूप से Equatable उत्पन्न नहीं करता (Swift 4.2+ से पहले)। स्पष्ट Equatable कार्यान्वयन जोड़ें या प्रत्येक केस की क्रमिक रूप से तुलना करने के लिए switch का उपयोग करें।

क्या पुनरावर्ती enum में associated values का उपयोग किया जा सकता है?

हाँ, indirect enum में associated values पेड़ और लिंक्ड सूचियाँ बनाने की एक मानक तकनीक है। एक केस में indirect चिह्नित उसी प्रकार का associated value हो सकता है।

associated values, struct में वैकल्पिक गुणों से कैसे भिन्न हैं?

Associated Values टाइप-सेफ हैं — प्रत्येक केस की गारंटी है कि उसके पास केवल अपना डेटा है। वैकल्पिक वाले struct में, प्रत्येक इंस्टेंस में सभी फ़ील्ड होते हैं, और रनटाइम nil जाँच की आवश्यकता होती है।

क्या associated values Codable का समर्थन करते हैं?

Swift associated values वाले enum के लिए स्वचालित रूप से Codable उत्पन्न नहीं करता। कस्टम कोडिंग कुंजियों का उपयोग करके केसों पर switch के माध्यम से encode और decode का मैन्युअल कार्यान्वयन आवश्यक है।

सारांश

  • Associated Values — प्रत्येक enum केस में अलग-अलग डेटा संलग्न करने का तंत्र
  • सिंटैक्स — फ़ंक्शन की तरह केस के बाद कोष्ठक में पैरामीटर घोषित करना
  • निष्कर्षण let बाइंडिंग या if case के साथ switch के माध्यम से
  • असंगत raw values के साथ — केवल एक का उपयोग करें
  • जेनेरिक associated values में enum को सार्वभौमिक कंटेनर बनाते हैं
  • State Machine — iOS में associated values के लिए विशिष्ट परिदृश्य

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

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

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

यह भी पढ़ें