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

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

Class Swift भाषा में एक संदर्भ प्रकार (reference type) है, जिसके इंस्टेंस असाइनमेंट पर कॉपी होने के बजाय संदर्भ द्वारा पास किए जाते हैं। structs के विपरीत, क्लासेज़ इनहेरिटेंस, डीइनिशियलाइज़ेशन और मेमोरी प्रबंधन के लिए स्वचालित संदर्भ गणना ARC का समर्थन करती हैं। Swift Programming Language Guide, 2026 के अनुसार, Apple के UI फ्रेमवर्क (UIKit, AppKit) के साथ काम करने और ऑब्जेक्ट की साझा पहचान की आवश्यकता वाले पैटर्न को लागू करने के लिए class आवश्यक है। class और struct के बीच चुनाव Swift में प्रमुख आर्किटेक्चरल निर्णयों में से एक है।

मुख्य बिंदु

  • Class — Swift में एक संदर्भ प्रकार जहां वेरिएबल हीप में ऑब्जेक्ट के संदर्भ को संग्रहीत करता है, न कि स्वयं मान को।
  • इनहेरिटेंस — क्लासेज़ पैरेंट क्लास के गुणों और विधियों को इनहेरिट कर सकती हैं और override के माध्यम से उन्हें ओवरराइड कर सकती हैं।
  • ARC — स्वचालित संदर्भ गणना मेमोरी को मुक्त करती है जब किसी ऑब्जेक्ट पर कोई सशक्त संदर्भ नहीं बचता।
  • Deinit — एक विशेष विधि जो संसाधनों को साफ करने के लिए ऑब्जेक्ट के मुक्त होने से पहले बुलाई जाती है।
  • पहचान — === और !== ऑपरेटर जांचते हैं कि क्या दो वेरिएबल एक ही क्लास इंस्टेंस को संदर्भित करते हैं।

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

Class — Swift में एक समग्र संदर्भ प्रकार है जो गुणों और विधियों को इनहेरिटेंस और डायनामिक डिस्पैच के समर्थन के साथ एक इकाई में समूहित करता है। struct के विपरीत, एक क्लास इंस्टेंस हीप में बनाया जाता है, और एक वेरिएबल इस इंस्टेंस के संदर्भ को संग्रहीत करता है, न कि स्वयं डेटा को।

जब आप एक क्लास वेरिएबल को दूसरे वेरिएबल को असाइन करते हैं, तो दोनों मेमोरी में उसी ऑब्जेक्ट को संदर्भित करते हैं। एक संदर्भ के माध्यम से परिवर्तन दूसरे के माध्यम से दिखाई देते हैं — यह संदर्भ प्रकारों का एक मौलिक गुण है, जिसका उपयोग डेलिगेशन, ऑब्ज़र्वेशन और साझा स्थिति पैटर्न में किया जाता है।

Apple Swift दस्तावेज़ीकरण के अनुसार, UIKit और AppKit के साथ काम करने का एकमात्र तरीका क्लासेज़ हैं, जहां सभी UI घटक UIView और UIViewController से इनहेरिट करते हैं। इसके अतिरिक्त, क्लासेज़ उन पैटर्न को लागू करने के लिए आवश्यक हैं जिनमें ऑब्जेक्ट पहचान (एक ऑब्जेक्ट के दो संदर्भ) और नियंत्रित जीवनकाल की आवश्यकता होती है।

Class एक संदर्भ प्रकार के रूप में

संदर्भ प्रकार शब्दार्थ — क्लासेज़ का प्रमुख गुण। किसी क्लास को एक नए वेरिएबल को असाइन करते समय, Swift संदर्भ की प्रतिलिपि बनाता है, डेटा की नहीं। उसी इंस्टेंस को संदर्भित करने वाले सभी वेरिएबल इसकी वर्तमान स्थिति देखते हैं और इसे संशोधित कर सकते हैं। यह व्यवहार मूल्य प्रकारों से मौलिक रूप से भिन्न है, जहां प्रत्येक वेरिएबल को एक स्वतंत्र प्रतिलिपि मिलती है।

swift
// संदर्भ प्रकार शब्दार्थ का उदाहरण
class User {
    var name: String
    init(name: String) { self.name = name }
}

let user1 = User(name: "Alice")
let user2 = user1           // user2 — समान संदर्भ
user2.name = "Bob"

print(user1.name)               // "Bob" — user2 के माध्यम से बदला गया!

// === ऑपरेटर के साथ पहचान जांच
print(user1 === user2)          // true — समान ऑब्जेक्ट

=== (पहचान) और !== ऑपरेटर जांचते हैं कि क्या दो वेरिएबल एक ही क्लास इंस्टेंस को संदर्भित करते हैं। यह == (समानता) से भिन्न है, जो गुण मानों की तुलना करता है। === ऑपरेटर struct के लिए उपलब्ध नहीं है — मूल्य प्रकारों की कोई पहचान नहीं होती।

क्लासेज़ की इनहेरिटेंस

इनहेरिटेंस — एक तंत्र जिसके द्वारा एक क्लास पैरेंट क्लास के गुणों और विधियों को ग्रहण कर सकती है। Swift में, एक क्लास केवल एक पैरेंट से इनहेरिट कर सकती है (एकल इनहेरिटेंस), लेकिन कई प्रोटोकॉल लागू कर सकती है। override कीवर्ड इनहेरिटेड विधि या गुण को ओवरराइड करने की अनुमति देता है।

बेस क्लास और सबक्लास

कोई भी क्लास जो दूसरी क्लास से इनहेरिट नहीं करती, स्वचालित रूप से बेस बन जाती है (NSObject से भ्रमित न हों)। एक सबक्लास अपने नाम के बाद कोलन के साथ पैरेंट निर्दिष्ट करता है। यदि कोई सबक्लास पैरेंट की विधि को ओवरराइड करता है, तो उसे पैरेंट के व्यवहार को संरक्षित करने के लिए super.method() को कॉल करना होगा — यह कंपाइलर की आवश्यकता है।

फ़ाइनल क्लास

class से पहले कीवर्ड final इनहेरिटेंस को रोकता है। कंपाइलर स्टैटिक डिस्पैच के माध्यम से फ़ाइनल क्लास की विधि कॉल को अनुकूलित कर सकता है, जिससे प्रदर्शन में सुधार होता है। उन क्लासेज़ के लिए final का उपयोग करें जो विस्तार के लिए नहीं हैं — यह आपके इरादे का दस्तावेज़ीकरण करता है और कोड को गति देता है।

swift
// Swift में क्लास इनहेरिटेंस का उदाहरण
class Vehicle {
    var speed: Double = 0

    func description() -> String {
        "Speed: \(speed) km/h"
    }
}

// Car, Vehicle से इनहेरिट करता है
class Car: Vehicle {
    var brand: String = "Unknown"

    override func description() -> String {
        "\(brand) - \(speed) km/h"
    }
}

// फ़ाइनल क्लास — इनहेरिटेंस को रोकता है
final class ElectricCar: Car {
    var batteryLevel: Double = 100
}

let tesla = ElectricCar()
tesla.brand = "Tesla"
tesla.speed = 120
print(tesla.description())  // "Tesla - 120.0 km/h"

इनहेरिटेंस एक शक्तिशाली लेकिन जिम्मेदारी भरा तंत्र है। गहरी पदानुक्रम (5+ स्तर) रखरखाव और परीक्षण को जटिल बनाती है। इनहेरिटेंस के बिना कार्यात्मक पुन: उपयोग के लिए, extension और प्रोटोकॉल-उन्मुख प्रोग्रामिंग के साथ प्रोटोकॉल का उपयोग करें — यह दृष्टिकोण Apple गहरी क्लास पदानुक्रम के विकल्प के रूप में प्रचारित करता है।

डीइनिशियलाइज़ेशन और मेमोरी प्रबंधन

Swift क्लास मेमोरी प्रबंधन के लिए ARC (स्वचालित संदर्भ गणना) का उपयोग करता है। प्रत्येक क्लास इंस्टेंस में एक सशक्त संदर्भ काउंटर होता है। जब एक नया सशक्त संदर्भ बनाया जाता है, तो काउंटर बढ़ता है; जब नष्ट होता है, तो घटता है। जब काउंटर शून्य तक पहुँचता है, तो मेमोरी मुक्त हो जाती है।

Deinit

Deinit — एक विधि जो क्लास इंस्टेंस के मुक्त होने से पहले स्वचालित रूप से बुलाई जाती है। यह संसाधनों को मुक्त करती है: फ़ाइलें बंद करती है, सूचनाओं से सदस्यता रद्द करती है, टाइमर रोकती है। Deinit केवल क्लासेज़ के लिए उपलब्ध है — structs और enums में यह नहीं होता।

कमज़ोर और बेस्वामी संदर्भ

सशक्त संदर्भ चक्रों (retain cycles) को रोकने के लिए, Swift weak और unowned संदर्भ प्रदान करता है। Weak एक वैकल्पिक संदर्भ है जो ऑब्जेक्ट के मुक्त होने पर स्वचालित रूप से nil हो जाता है। Unowned गैर-वैकल्पिक है लेकिन एक ऐसे ऑब्जेक्ट को संदर्भित करता है जो वर्तमान संदर्भ से अधिक समय तक जीवित रहने की गारंटी है। एक विशिष्ट retain cycle पैरेंट-चाइल्ड संबंध में होता है: चाइल्ड पैरेंट के लिए एक सशक्त संदर्भ रखता है।

swift
// ARC और कमज़ोर संदर्भ का उदाहरण
class Parent {
    var name: String
    var child: Child?

    init(name: String) { self.name = name }
    deinit { print("\(name) मुक्त हो गया") }
}

class Child {
    var name: String
    weak var parent: Parent?   // weak retain cycle को रोकता है

    init(name: String) { self.name = name }
    deinit { print("\(name) मुक्त हो गया") }
}

var parent: Parent? = Parent(name: "Anna")
parent?.child = Child(name: "Mia")
parent?.child?.parent = parent

parent = nil  // दोनों ऑब्जेक्ट मुक्त हो गए!
// weak के बिना यह retain cycle बनाएगा

चाइल्ड ऑब्जेक्ट से पैरेंट तक संदर्भों और क्लोज़र में कैप्चर सूचियों के लिए हमेशा weak का उपयोग करें। Unowned का उपयोग केवल तभी करें जब आप सुनिश्चित हों कि ऑब्जेक्ट वर्तमान संदर्भ से अधिक समय तक जीवित रहेगा — unowned का गलत उपयोग मुक्त मेमोरी तक पहुँचने पर क्रैश का कारण बन सकता है।

Class vs Struct: मुख्य अंतर

class और struct के बीच चुनाव एक आर्किटेक्चरल निर्णय है जो प्रदर्शन, थ्रेड सुरक्षा और API डिज़ाइन को प्रभावित करता है। प्रत्येक मामले में सही निर्णय लेने में मदद के लिए मुख्य अंतरों की तालिका पर विचार करें।

विशेषताclassstruct
प्रकारसंदर्भ प्रकारमूल्य प्रकार (प्रतिलिपि)
मेमोरीहीप + ARCस्टैक / इनलाइन
इनहेरिटेंससमर्थन करता है (एक पैरेंट)समर्थन नहीं करता
Deinitउपलब्धउपलब्ध नहीं
पहचान (===)समर्थन करता हैसमर्थन नहीं करता
Mutatingआवश्यक नहीं (हमेशा mutating)केवल mutating के साथ
Memberwise initउत्पन्न नहीं होतास्वचालित रूप से उत्पन्न होता है
थ्रेड सुरक्षागारंटी नहीं (साझा स्थिति)गारंटी (प्रतिलिपि)

क्लासेज़ का उपयोग करें जब आपको साझा पहचान (कोड के कई भाग एक ऑब्जेक्ट के साथ काम कर रहे हों), इनहेरिटेंस, या Objective-C runtime के साथ इंटरैक्शन की आवश्यकता हो। बाकी सबके लिए, structs पसंद किए जाते हैं — वे तेज़, मल्टीथ्रेडेड कोड में सुरक्षित होते हैं और मेमोरी प्रबंधन की आवश्यकता नहीं होती।

Swift में class का उपयोग कब करें

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

UIKit और AppKit घटक

iOS और macOS में सभी UI घटक UIView (iOS) या NSView (macOS) से इनहेरिट करने वाली क्लासेज़ हैं। आप UIViewController को struct से प्रतिस्थापित नहीं कर सकते — इसे संसाधनों को मुक्त करने के लिए इनहेरिटेंस और deinit की आवश्यकता है। UIKit के साथ काम करते समय, कंट्रोलर, व्यू और उनके डेलिगेट के लिए क्लासेज़ का उपयोग करें।

सिंगलटन और साझा स्थिति

सिंगलटन पैटर्न (पूरे एप्लिकेशन के लिए एक क्लास इंस्टेंस) को संदर्भ शब्दार्थ की आवश्यकता है। प्रबंधक: NetworkManager, SettingsManager, AnalyticsService — आमतौर पर shared static गुण वाली क्लासेज़ के रूप में लागू किए जाते हैं। Structs उपयुक्त नहीं हैं क्योंकि प्रत्येक प्रतिलिपि एक स्वतंत्र इंस्टेंस होगी।

डिपेंडेंसी इंजेक्शन और संदर्भ ऑब्जेक्ट

जब कोई ऑब्जेक्ट सत्य का एकमात्र स्रोत होना चाहिए और मॉड्यूल के बीच संदर्भ द्वारा पारित किया जाता है — class का उपयोग करें। यह स्थिति प्रबंधन पर लागू होता है, जहां एक स्थान पर ऑब्जेक्ट को बदलना सभी आश्रित घटकों में दिखाई देना चाहिए। SwiftUI में ObservableObject के लिए, क्लासेज़ अनिवार्य हैं।

swift
// ObservableObject — SwiftUI के लिए class आवश्यक
import SwiftUI

class AppViewModel: ObservableObject {
    @Published var isLoggedIn: Bool = false
    @Published var username: String = ""

    func login(user: String) {
        isLoggedIn = true
        username = user
    }
}

// SwiftUI View में उपयोग
struct ContentView: View {
    @StateObject var viewModel = AppViewModel()

    var body: some View {
        Text(viewModel.isLoggedIn ? "स्वागत है" : "लॉगिन")
    }
}

नियम: यदि किसी ऑब्जेक्ट में पहचान (दो संदर्भ -> एक ऑब्जेक्ट) होनी चाहिए, एक एकल इंस्टेंस होना चाहिए, या UIKit/Objective-C के साथ काम करना चाहिए — class चुनें। यदि कोई ऑब्जेक्ट केवल डेटा रखता है — struct चुनें।

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

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

Class Swift में एक संदर्भ प्रकार है जो इनहेरिटेंस, डीइनिशियलाइज़ेशन और मेमोरी प्रबंधन के लिए ARC का समर्थन करता है। क्लास इंस्टेंस हीप में संग्रहीत होते हैं, और वेरिएबल में ऑब्जेक्ट का संदर्भ होता है, उसकी प्रतिलिपि नहीं।

Swift में class struct से कैसे भिन्न है?

Class — संदर्भ प्रकार (संदर्भ द्वारा पास किया जाता है), इनहेरिटेंस और deinit का समर्थन करता है। Struct — मूल्य प्रकार (कॉपी किया जाता है), इनहेरिटेंस का समर्थन नहीं करता, लेकिन प्रोटोकॉल लागू करता है और स्वचालित रूप से memberwise init प्राप्त करता है। Swift डिफ़ॉल्ट प्रकार के रूप में struct की अनुशंसा करता है।

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

ARC (स्वचालित संदर्भ गणना) — Swift क्लासेज़ के लिए मेमोरी प्रबंधन तंत्र। प्रत्येक इंस्टेंस में एक सशक्त संदर्भ काउंटर होता है। जब काउंटर शून्य तक पहुँचता है, तो मेमोरी मुक्त हो जाती है। weak और unowned संदर्भ ऑब्जेक्ट के बीच retain cycles को रोकते हैं।

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

Deinit — एक क्लास विधि जो इसकी मेमोरी मुक्त होने से पहले स्वचालित रूप से बुलाई जाती है। फ़ाइलें बंद करने, सूचनाओं की सदस्यता रद्द करने और अन्य सफाई संचालन के लिए उपयोग की जाती है। Deinit केवल क्लासेज़ में उपलब्ध है — structs में यह नहीं होता।

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

UIKit/AppKit UI घटकों, सिंगलटन, SwiftUI में ObservableObject, साझा पहचान वाले ऑब्जेक्ट (delegate, observer) और Objective-C runtime के साथ काम करते समय class का उपयोग करें। डेटा मॉडल, DTO और कॉन्फ़िगरेशन के लिए, struct पसंद किया जाता है।

सारांश

  • Class Swift में एक संदर्भ प्रकार है जिसमें संदर्भ द्वारा पास करने का शब्दार्थ है: एक ऑब्जेक्ट की ओर इशारा करने वाले सभी वेरिएबल इसकी वर्तमान स्थिति देखते हैं और इसे संशोधित कर सकते हैं।
  • ARC सशक्त संदर्भ गणना के माध्यम से क्लास मेमोरी का प्रबंधन करता है; weak और unowned पैरेंट-चाइल्ड और क्लोज़र में retain cycles को रोकते हैं।
  • इनहेरिटेंस क्लासेज़ को पैरेंट व्यवहार को पुन: उपयोग और ओवरराइड करने की अनुमति देती है, लेकिन गहरी पदानुक्रम (5+ स्तर) कोड रखरखाव को जटिल बनाती है।
  • Deinit ऑब्जेक्ट के मुक्त होने पर चलता है और संसाधनों — फ़ाइलों, टाइमर, NotificationCenter सदस्यताओं को मुक्त करने के लिए आवश्यक है।
  • UIKit और AppKit को सभी UI घटकों — UIView, UIViewController, उनके डेलिगेट और डेटा स्रोतों के लिए क्लासेज़ की आवश्यकता है।
  • SwiftUI में ObservableObject — class अनिवार्य है क्योंकि SwiftUI संदर्भ द्वारा @Published और @StateObject के माध्यम से परिवर्तनों को ट्रैक करता है।
  • Apple नए डेटा प्रकारों के लिए डिफ़ॉल्ट प्रकार के रूप में struct की अनुशंसा करता है — class का उपयोग केवल तभी करें जब पहचान, इनहेरिटेंस या Objective-C एकीकरण की आवश्यकता हो।

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

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

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

यह भी पढ़ें