Swift में Extension: यह क्या है, सिंटैक्स और विधियाँ कैसे जोड़ें

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

Extension Swift में एक तंत्र है जो मौजूदा प्रकारों में उनके स्रोत कोड को बदले बिना नई कार्यक्षमता जोड़ने की अनुमति देता है। एक्सटेंशन विधियों, परिकलित गुणों, आरंभकों, सबस्क्रिप्ट्स, नेस्टेड प्रकारों और प्रोटोकॉल अनुपालन का समर्थन करते हैं। Apple दस्तावेज़ीकरण, 2026 के अनुसार, एक्सटेंशन Swift परियोजनाओं में कोड संगठन और ओपन/क्लोज़्ड सिद्धांत के पालन के लिए एक महत्वपूर्ण उपकरण हैं।

मुख्य बातें

  • Extension — मूल को बदले बिना मौजूदा प्रकारों में कार्यक्षमता जोड़ना
  • परिकलित गुण — extension के माध्यम से जोड़े जा सकते हैं, संग्रहीत नहीं
  • प्रोटोकॉल अनुपालन — किसी भी प्रकार के लिए extension के माध्यम से प्रोटोकॉल कार्यान्वयन
  • कोड संगठन — एक्सटेंशन संबंधित तर्क को प्रोटोकॉल द्वारा समूहित करते हैं
  • ओपन/क्लोज़्ड — एक्सटेंशन विस्तार के लिए खुलेपन के सिद्धांत को लागू करते हैं

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

Extension Swift में एक भाषा निर्माण है जो मौजूदा प्रकार (क्लास, स्ट्रक्चर, एनम, प्रोटोकॉल) को नई क्षमताओं के साथ विस्तारित करने की अनुमति देता है। यह Objective-C में श्रेणियों के समान है लेकिन अधिक शक्तिशाली है।

Extension जोड़ सकता है:

  • परिकलित गुण — इंस्टेंस और प्रकार
  • विधियाँ — इंस्टेंस और प्रकार
  • आरंभक (convenience init)
  • सबस्क्रिप्ट्स
  • नेस्टेड प्रकार
  • प्रोटोकॉल अनुपालन

Apple दस्तावेज़ीकरण के अनुसार, extension मौजूदा विधियों को ओवरराइड नहीं कर सकता (डायनामिक डिस्पैच) और संग्रहीत गुण नहीं जोड़ सकता। ये सीमाएँ मूल प्रकार की अखंडता को बनाए रखती हैं।

एक्सटेंशन का सिंटैक्स

Extension की घोषणा कीवर्ड extension के साथ की जाती है जिसके बाद विस्तारित किए जाने वाले प्रकार का नाम आता है।

swift
extension Double {
    var km: Double { return self * 1000.0 }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1000.0 }
}

let distance = 5.0.km
print("5 km = \(distance) meters") // 5000.0

आप न केवल अपने स्वयं के प्रकार बल्कि Swift, Foundation, UIKit और अन्य फ्रेमवर्क के मानक पुस्तकालय प्रकारों को भी विस्तारित कर सकते हैं। यह extension को डोमेन-विशिष्ट कार्यक्षमता जोड़ने के लिए एक शक्तिशाली उपकरण बनाता है।

Extension के माध्यम से विधियाँ जोड़ना

Extension किसी भी मौजूदा प्रकार में इंस्टेंस और प्रकार विधियाँ जोड़ने की अनुमति देता है।

swift
extension String {
    func isValidEmail() -> Bool {
        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
        return self.range(of: emailRegex, options: .regularExpression) != nil
    }

    static func random(length: Int) -> String {
        let letters = "abcdefghijklmnopqrstuvwxyz0123456789"
        return String((0..<length).map { _ in letters.randomElement()! })
    }
}

let email = "user@example.com"
print(email.isValidEmail()) // true
let code = String.random(length: 8) // "a3f8k2m1"

म्यूटेटिंग विधियाँ मान प्रकारों (struct, enum) का विस्तार करती हैं और self को संशोधित कर सकती हैं। क्लासेस के लिए म्यूटेटिंग की आवश्यकता नहीं है। Extension मानक पुस्तकालय प्रकारों में भी म्यूटेटिंग विधियाँ जोड़ सकता है।

Extension में परिकलित गुण

Extension केवल परिकलित गुण जोड़ सकता है — संग्रहीत गुणों की अनुमति नहीं है। यह तर्कसंगत है क्योंकि extension मूल प्रकार की मेमोरी का प्रबंधन नहीं करता।

swift
extension Date {
    var isPast: Bool {
        return self < Date()
    }

    var isToday: Bool {
        return Calendar.current.isDateInToday(self)
    }
}

let someDate = Date().addingTimeInterval(3600)
print(someDate.isPast) // false (one hour from now is future)

Extension में परिकलित गुण मुख्य कार्यान्वयन के समान नियमों का पालन करते हैं: आप { get } और { get set } गुण बना सकते हैं। Swift एक प्रकार के लिए एक्सटेंशन की संख्या पर कोई सीमा नहीं लगाता। आप एक प्रकार के लिए अलग-अलग फ़ाइलों में जितने चाहें उतने एक्सटेंशन घोषित कर सकते हैं — बड़ी परियोजनाओं में यह मानक अभ्यास है।

Extension के माध्यम से प्रोटोकॉल अनुपालन

Extension प्रोटोकॉल लागू करने का पसंदीदा तरीका है। मुख्य प्रकार घोषणा को अव्यवस्थित करने के बजाय, सभी प्रोटोकॉल विधियों को एक अलग extension में रखा जाता है।

swift
struct User {
    let id: Int
    let name: String
    let email: String
}

// Extension per protocol — clean separation
extension User: Equatable {
    static func == (lhs: User, rhs: User) -> Bool {
        return lhs.id == rhs.id
    }
}

extension User: Codable {
    enum CodingKeys: String, CodingKey {
        case id, name, email
    }
}

यह दृष्टिकोण जिम्मेदारियों को अलग करता है: मुख्य संरचना में केवल संग्रहीत गुण होते हैं, एक्सटेंशन में प्रोटोकॉल कार्यान्वयन होते हैं। Swift उन प्रकारों के लिए भी extension के माध्यम से प्रोटोकॉल लागू करने की अनुमति देता है जिन्हें हम नियंत्रित नहीं करते।

Extension और कोड संगठन

Extension केवल एक भाषा सुविधा नहीं है बल्कि वास्तुशिल्प संगठन का एक उपकरण है। एक्सटेंशन का उचित उपयोग कोड को पढ़ने योग्य और बनाए रखने योग्य बनाता है।

  • प्रोटोकॉल द्वारा समूहीकरण — प्रत्येक प्रोटोकॉल एक अलग extension में
  • मार्क (MARK)// MARK: - Equatable नेविगेशन के लिए
  • फ़ाइल पृथक्करण — विभिन्न प्रोटोकॉल के एक्सटेंशन विभिन्न फ़ाइलों में
  • निजी सहायक — extension में निजी विधियाँ private के रूप में चिह्नित
swift
// MARK: - User + Displayable
extension User: Displayable {
    var displayName: String {
        return "\(name) (\(email))"
    }
}

Swift API डिज़ाइन दिशानिर्देशों के अनुसार, एक्सटेंशन पठनीयता में सुधार करते हैं: डेवलपर मुख्य घोषणा में डेटा संरचना और एक्सटेंशन में तर्क देखता है। यह इंटरफ़ेस पृथक्करण सिद्धांत के अनुरूप है।

where बाधाओं वाला extension केवल विशिष्ट प्रकारों के लिए विधियाँ जोड़ता है: extension Array where Element: Equatable { func isUnique() -> Bool }. ऐसा कोड संक्षिप्त और प्रकार-सुरक्षित है — isUnique विधि केवल Equatable तत्वों वाले ऐरे पर दिखाई देती है, संकलन समय पर त्रुटियों को समाप्त करती है और API को अन्य डेवलपर्स के लिए साफ़, सुरक्षित और स्पष्ट बनाती है।

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

क्या extension संग्रहीत गुण जोड़ सकता है?

नहीं, extension संग्रहीत गुण नहीं जोड़ सकता। यह सीमा मौलिक है: extension प्रकार के उदाहरण के लिए मेमोरी आवंटन में भाग नहीं लेता। संग्रहीत गुणों के लिए, मुख्य प्रकार घोषणा का उपयोग करें।

क्या extension के माध्यम से मौजूदा विधि को ओवरराइड किया जा सकता है?

नहीं, extension विधियों को ओवरराइड नहीं कर सकता। मौजूदा विधि के समान हस्ताक्षर वाली विधि घोषित करने का प्रयास संकलन त्रुटि का कारण बनेगा। ओवरराइडिंग के लिए, क्लास इनहेरिटेंस का उपयोग करें।

Extension subclassing से कैसे भिन्न है?

Extension नया प्रकार बनाए बिना कार्यक्षमता जोड़ता है। Subclassing एक पदानुक्रम बनाता है और ओवरराइडिंग का समर्थन करता है। Extension को मूल स्रोत कोड तक पहुँच की आवश्यकता नहीं होती और यह सभी प्रकारों के साथ काम करता है।

क्या extension जेनेरिक हो सकता है?

हाँ, extension जेनेरिक हो सकता है यदि विस्तारित प्रकार जेनेरिक है: extension Array where Element: Numeric. आप extension के अंदर अपने स्वयं के प्रकार मापदंडों के साथ जेनेरिक विधियाँ भी जोड़ सकते हैं।

Extension प्रदर्शन को कैसे प्रभावित करता है?

Extension प्रदर्शन को प्रभावित नहीं करता — extension विधियाँ सामान्य विधियों की तरह संकलित होती हैं। extension वाले प्रोटोकॉल के लिए स्थैतिक डिस्पैच का उपयोग किया जाता है, जो क्लासेस के डायनामिक डिस्पैच से तेज़ हो सकता है।

सारांश

  • Extension परिकलित गुण, विधियाँ, प्रोटोकॉल और सबस्क्रिप्ट्स जोड़ता है
  • संग्रहीत गुण अनुमत नहीं हैं — extension मेमोरी आवंटित नहीं करता
  • प्रोटोकॉल अनुपालन extension के माध्यम से Swift में कोड संगठन का मानक अभ्यास है
  • ओपन/क्लोज़्ड सिद्धांत — प्रकार विस्तार के लिए खुला, संशोधन के लिए बंद
  • जेनेरिक एक्सटेंशन where खंडों के साथ विशिष्ट व्यवहार प्रदान करते हैं
  • पठनीयता — एक्सटेंशन प्रोटोकॉल और कार्यों द्वारा तर्क को समूहित करते हैं

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

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

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

यह भी पढ़ें