struct — यह क्या है, मुख्य अवधारणाएँ और Swift में सिंटैक्स

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

Struct Swift भाषा में एक वैल्यू टाइप (value type) है, जिसके इंस्टेंस कोड के विभिन्न भागों के बीच पास करते समय कॉपी किए जाते हैं। क्लासेस के विपरीत, संरचनाएँ इनहेरिटेंस का समर्थन नहीं करतीं, लेकिन वे प्रोटोकॉल लागू करती हैं, प्रॉपर्टी और मेथड रखती हैं, और ARC के बिना पूर्वानुमानित मेमोरी प्रबंधन प्रदान करती हैं। Swift Programming Language Guide, 2026 के अनुसार, struct Swift का मूलभूत निर्माण खंड है — यहाँ तक कि मानक प्रकार Int, String, Array और Dictionary भी संरचनाओं के रूप में लागू किए गए हैं। भाषा डेटा मॉडलिंग के लिए संरचनाओं को प्राथमिकता विकल्प के रूप में सुझाती है।

मुख्य बिंदु

  • Struct Swift में एक वैल्यू टाइप है जो असाइनमेंट पर कॉपी होता है और संदर्भ (reference) के बजाय मान (value) द्वारा पास किया जाता है।
  • Copy-on-Write एक ऑप्टिमाइज़ेशन है जिसमें डेटा की वास्तविक कॉपी केवल मान बदलने पर होती है, असाइनमेंट पर नहीं।
  • Mutating एक कीवर्ड है जो संरचना के गुणों को बदलने वाले मेथड के लिए आवश्यक है।
  • प्रोटोकॉल — संरचनाएँ प्रोटोकॉल और एक्सटेंशन लागू कर सकती हैं, जो इनहेरिटेंस के बिना लचीलापन प्रदान करता है।
  • सुरक्षा — रेफरेंस साइकिल की अनुपस्थिति संरचनाओं को मल्टीथ्रेडेड कोड और डेटा मॉडल के लिए बेहतर बनाती है।

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

Struct (संरचना) Swift में एक समग्र डेटा प्रकार है जो संबंधित गुणों और विधियों को एक इकाई में समूहित करता है। क्लासेस के विपरीत, संरचनाएँ value types हैं: किसी फंक्शन में पास करने या नए वेरिएबल में असाइन करने पर, मूल वस्तु के संदर्भ के बजाय संरचना की एक स्वतंत्र प्रतिलिपि बनाई जाती है।

Swift सभी आदिम प्रकारों के लिए संरचनाओं का उपयोग करता है: Int, Double, String, Bool, Array, Dictionary और Set। इसका मतलब है कि एक मूल Int भी संरचना की तरह व्यवहार करता है — असाइनमेंट पर एक प्रतिलिपि बनती है। डेवलपर अपनी स्वयं की संरचना को गुणों और विधियों के किसी भी सेट के साथ परिभाषित कर सकता है।

Swift Evolution (SE-0143) के अनुसार, मानक प्रकारों को संरचनाओं के रूप में लागू करने का निर्णय प्रदर्शन और पूर्वानुमानशीलता के कारण है। Value types रेफरेंस साइकिल नहीं बनाते, ARC रेफरेंस काउंटिंग की आवश्यकता नहीं होती, और गारंटी देते हैं कि प्रतिलिपि में बदलाव मूल को प्रभावित नहीं करेगा — यह मल्टीथ्रेडेड परिदृश्यों में डेटा अपरिवर्तनीयता के लिए अत्यंत महत्वपूर्ण है।

Struct एक value type के रूप में

Value type सिमैंटिक्स struct और class के बीच मुख्य अंतर है। जब आप एक संरचना को नए वेरिएबल में असाइन करते हैं या किसी फंक्शन में पास करते हैं, Swift सभी डेटा की स्वतंत्र प्रतिलिपि बनाता है। प्रतिलिपि में किए गए कोई भी बदलाव मूल को प्रभावित नहीं करते, जो रेफरेंस प्रकारों के विशिष्ट दुष्प्रभावों को समाप्त करता है।

swift
// वैल्यू टाइप सिमैंटिक्स का उदाहरण
struct Point {
    var x: Double
    var y: Double
}

var p1 = Point(x: 10, y: 20)
var p2 = p1        // p2, p1 की एक स्वतंत्र प्रतिलिपि है
p2.x = 99            // केवल p2 बदलता है
print(p1.x)         // 10 — p1 अपरिवर्तित
print(p2.x)         // 99

Copy-on-Write ऑप्टिमाइज़ेशन

Swift कॉपीिंग को ऑप्टिमाइज़ करने के लिए Copy-on-Write (COW) का उपयोग करता है। यदि कई वेरिएबल एक ही संरचना को संदर्भित करते हैं लेकिन उनमें से कोई भी डेटा को संशोधित नहीं करता, तो कोई वास्तविक कॉपी नहीं होती। Swift पहले म्यूटेशन तक वेरिएबल्स के बीच मेमोरी साझा करता है — तब एक वास्तविक प्रतिलिपि बनाई जाती है। यह अत्यधिक आवंटन संचालन को रोकता है और संग्रहों के साथ काम को गति देता है।

परिवर्तनशीलता और mutating मेथड

डिफ़ॉल्ट रूप से, संरचना की विधियाँ उसके गुणों को संशोधित नहीं कर सकतीं — Swift को उन विधियों के लिए स्पष्ट mutating कीवर्ड की आवश्यकता होती है जो बदलाव करती हैं। यह प्रतिबंध आकस्मिक म्यूटेशन से बचाता है और कोड को पूर्वानुमानित बनाता है: यदि कोई विधि mutating के रूप में चिह्नित नहीं है, तो आप गारंटी से संरचना नहीं बदलेंगे।

Mutating क्रिया में

जब आप किसी विधि से पहले mutating कीवर्ड जोड़ते हैं, Swift को संरचना के गुणों में नए मान लिखने की क्षमता मिलती है। वास्तव में, विधि self = के माध्यम से संरचना इंस्टेंस को पूरी तरह से नए से बदल भी सकती है। यह तंत्र, उदाहरण के लिए, Option और Result प्रकारों में उपयोग किया जाता है।

swift
// Mutating मेथड वाला struct
struct Counter {
    private var value: Int = 0

    // Mutating मेथड — गुणों को संशोधित कर सकता है
    mutating func increment() {
        value += 1
    }

    // Mutating मेथड self को पूरी तरह से बदल सकता है
    mutating func reset() {
        self = Counter()
    }

    // गैर-mutating मेथड — केवल पढ़ने के लिए
    func currentValue() -> Int {
        return value
    }
}

var counter = Counter()
counter.increment()
print(counter.currentValue())  // 1
counter.reset()
print(counter.currentValue())  // 0

Mutating के नियम: संरचना को var से घोषित किया जाना चाहिए, let से नहीं — एक स्थिर संरचना mutating विधि को कॉल नहीं कर सकती। कंपाइलर बिल्ड समय पर इसकी जाँच करता है: let-स्थिरांक पर mutating विधि कॉल करने का प्रयास संकलन त्रुटि का कारण बनेगा।

Struct vs Class: तुलना

struct और class के बीच चुनाव Swift में मौलिक निर्णयों में से एक है। दोनों प्रकार गुण, विधियाँ, आरंभकर्ता रख सकते हैं और प्रोटोकॉल लागू कर सकते हैं, लेकिन मेमोरी सिमैंटिक्स, इनहेरिटेंस और जीवनचक्र प्रबंधन में मूलभूत अंतर हैं।

विशेषताstructclass
प्रकारValue type (कॉपी होता है)Reference type (संदर्भ)
इनहेरिटेंससमर्थन नहीं करतासमर्थन करता है
ARC / रेफरेंस काउंटिंगआवश्यक नहींARC आवश्यक
डीइनिशियलाइज़ेशनसमर्थन नहीं करताdeinit का समर्थन करता है
स्थिरांक में गुण परिवर्तनकेवल var द्वाराlet द्वारा संभव (संदर्भ स्थिर है)
टाइप कास्टिंगसमर्थन नहीं करतासमर्थन करता है
संग्रहों में भंडारणसीधे संग्रहीत (मान)संदर्भ के रूप में संग्रहीत (पॉइंटर)

संरचनाएँ तब पसंद की जाती हैं जब डेटा इनहेरिटेंस की आवश्यकता नहीं रखता, उसकी साझा पहचान नहीं होनी चाहिए (जैसे, निर्देशांक, आकार, कॉन्फ़िगरेशन) और मॉड्यूल के बीच पास किया जाता है। UI घटकों (UIView, UIViewController), सिंगलटन और साझा पहचान वाली वस्तुओं के लिए क्लासेस चुनी जाती हैं।

struct कब चुनें

Apple Swift में डेटा मॉडलिंग के लिए struct को डिफ़ॉल्ट प्रकार के रूप में उपयोग करने की अनुशंसा करता है। संरचनाएँ पूर्वानुमानित कॉपी सिमैंटिक्स और रेफरेंस काउंटिंग के ओवरहेड की अनुपस्थिति के कारण अधिकांश परिदृश्यों के लिए उपयुक्त हैं। आइए विशिष्ट मामलों को देखें जहाँ struct सबसे अच्छा विकल्प है।

बिना इनहेरिटेंस के डेटा मॉडल

यदि किसी इकाई में इनहेरिटेंस की आवश्यकता के बिना डेटा है (Product, User, Order, Point), तो struct का उपयोग करें। कंपाइलर स्वचालित रूप से memberwise initializer उत्पन्न करता है — आपको मैन्युअल रूप से init लिखने की आवश्यकता नहीं है। Equatable और Hashable भी उन संरचनाओं के लिए स्वचालित रूप से लागू होते हैं जिनके सभी गुण इन प्रोटोकॉल का अनुपालन करते हैं।

अपरिवर्तनीय डेटा

कॉन्फ़िगरेशन, सेटिंग्स और फ़्लैग के लिए जो निर्माण के बाद नहीं बदलते, struct class से बेहतर है। एक स्थिर (let) संरचना सभी नेस्टेड फ़ील्ड की अपरिवर्तनीयता की गारंटी देती है — class में यह केवल संदर्भ पर लागू होता है, वस्तु की सामग्री पर नहीं।

मल्टीथ्रेडेड कोड

वैल्यू सिमैंटिक्स के कारण मल्टीथ्रेडेड वातावरण में संरचनाएँ सुरक्षित हैं। प्रत्येक थ्रेड को डेटा की एक स्वतंत्र प्रतिलिपि मिलती है और वह अन्य थ्रेड्स को प्रभावित नहीं करता। Value types के लिए थ्रेड्स के बीच डेटा रेस असंभव हैं, जो SwiftUI में मॉडल के लिए struct को पसंदीदा विकल्प बनाता है (ObservableObject को class चाहिए, लेकिन @State struct का उपयोग करता है)।

swift
// डेटा मॉडल के लिए struct उपयोग का उदाहरण
struct User: Codable, Identifiable {
    let id: UUID
    var name: String
    var email: String
    var isPremium: Bool

    // गणना की गई प्रॉपर्टी — non-mutating
    var displayName: String {
        isPremium ? "\(name) ⭐️" : name
    }
}

// स्वचालित memberwise आरंभकर्ता
let user = User(
    id: UUID(),
    name: "Alice",
    email: "alice@example.com",
    isPremium: true
)

// कॉपी करना मल्टी-थ्रेडिंग के लिए सुरक्षित है
var userCopy = user
userCopy.isPremium = false
// user.isPremium true रहता है

class का उपयोग करें जब आपको इनहेरिटेंस (UIKit/AppKit घटक), साझा पहचान (delegate, observer) या नियंत्रित वस्तु जीवनचक्र (deinit) की आवश्यकता हो। बाकी सबके लिए — struct का उपयोग करें।

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

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

Struct Swift में एक वैल्यू टाइप है जो कोड के भागों के बीच पास करने पर कॉपी होता है। संरचनाओं में गुण, विधियाँ, आरंभकर्ता हो सकते हैं और वे प्रोटोकॉल लागू कर सकती हैं। Swift के मूल प्रकार (Int, String, Array) संरचनाओं के रूप में लागू किए गए हैं।

Swift में struct और class में क्या अंतर है?

Struct एक value type है (असाइनमेंट पर कॉपी होता है), इनहेरिटेंस का समर्थन नहीं करता और ARC की आवश्यकता नहीं है। Class एक reference type है (संदर्भ द्वारा पास होता है), इनहेरिटेंस, डीइनिशियलाइज़ेशन और रेफरेंस काउंटिंग का समर्थन करता है। डेवलपर्स struct को डिफ़ॉल्ट प्रकार के रूप में सुझाते हैं।

Swift struct में mutating क्या है?

Mutating एक कीवर्ड है जो इंगित करता है कि संरचना की कोई विधि उसके गुणों को बदल सकती है। Mutating के बिना, कंपाइलर फ़ील्ड संशोधन को रोकता है। Mutating विधियाँ केवल var से घोषित वेरिएबल पर कॉल की जा सकती हैं, let पर नहीं।

Swift में Copy-on-Write क्या है?

Copy-on-Write (COW) Swift का संरचनाओं के लिए एक ऑप्टिमाइज़ेशन है जिसमें डेटा की वास्तविक कॉपी पहले म्यूटेशन तक स्थगित कर दी जाती है। जब तक सभी वेरिएबल केवल संरचना को पढ़ते हैं, वे एक मेमोरी क्षेत्र साझा करते हैं। यह बड़े संग्रहों के साथ काम करते समय प्रदर्शन में सुधार करता है।

Swift में struct कब और class कब उपयोग करें?

बिना इनहेरिटेंस के डेटा मॉडल, कॉन्फ़िगरेशन, DTO और मल्टीथ्रेडेड परिदृश्यों के लिए struct का उपयोग करें। UIKit/AppKit UI घटकों, सिंगलटन, साझा पहचान वाली संस्थाओं (delegate, observer) और डीइनिशियलाइज़ेशन की आवश्यकता वाली वस्तुओं के लिए class का उपयोग करें।

सारांश

  • Struct Swift में एक वैल्यू टाइप है जो असाइनमेंट पर कॉपी होता है, प्रतियों के बीच बिना दुष्प्रभावों के पूर्वानुमानित व्यवहार प्रदान करता है।
  • Copy-on-Write संरचनाओं के प्रदर्शन को अनुकूलित करता है — वास्तविक कॉपी केवल पहले म्यूटेशन पर होती है, हर असाइनमेंट पर नहीं।
  • Swift के मानक प्रकार — Int, String, Array, Dictionary — संरचनाओं के रूप में लागू किए गए हैं, जो सभी बुनियादी संचालन के लिए वैल्यू सिमैंटिक्स सुनिश्चित करते हैं।
  • Mutating संरचना के गुणों को बदलने वाली विधियों के लिए अनिवार्य कीवर्ड है; इसे केवल var इंस्टेंस पर कॉल किया जा सकता है।
  • संरचनाएँ इनहेरिटेंस का समर्थन नहीं करतीं लेकिन प्रोटोकॉल लागू करती हैं और कार्यक्षमता जोड़ने के लिए एक्सटेंशन का उपयोग कर सकती हैं।
  • Equatable और Hashable उन संरचनाओं के लिए स्वचालित रूप से लागू होते हैं जिनके सभी गुण इन प्रोटोकॉल का अनुपालन करते हैं — संग्रहों में तुलना और उपयोग को सरल बनाते हैं।
  • Apple struct को डिफ़ॉल्ट प्रकार के रूप में सुझाता है — class का उपयोग केवल तब करें जब इनहेरिटेंस, साझा पहचान या नियंत्रित वस्तु जीवनचक्र की आवश्यकता हो।

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

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

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

यह भी पढ़ें