Swift Academy · पाठ

as! से अनिवार्य कास्टिंग और उसके जोखिम

as! का उपयोग तभी कीजिए जब कास्टिंग के सफल होने की गारंटी हो।

पाठ 3, कुल 4 में से13 चरण

as! से अनिवार्य कास्टिंग और उसके जोखिम, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

बलपूर्वक कास्टिंग

बलपूर्वक कास्ट ऑपरेटर as! एक ही चरण में डाउनकास्ट और आवरण-हटाने का काम करता है। यह सीधे गैर-वैकल्पिक प्रकार देता है, लेकिन कास्ट विफल होने पर क्रैश करता है।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
let dog = a as! Dog
print(dog.bark())

वैकल्पिक आवरण नहीं

as? के विपरीत, as! का परिणाम साधारण प्रकार होता है, वैकल्पिक नहीं। इसलिए आवरण हटाने के लिए कुछ नहीं होता।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
let dog: Dog = a as! Dog
print(type(of: dog))

as! का जोखिम

यदि इंस्टेंस वास्तव में लक्ष्य प्रकार का नहीं है, तो as! रनटाइम ट्रैप उत्पन्न करता है और प्रोग्राम रोक देता है। इससे उबरने का कोई तरीका नहीं होता।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
// let cat = a as! Cat  // would crash at runtime
print("Only force-cast when certain")

बलपूर्वक कास्टिंग कब सुरक्षित है

as! का उपयोग तभी कीजिए जब आपको प्रकार के बारे में पूरी तरह निश्चितता हो, जैसे is से जाँच करने के तुरंत बाद।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
if a is Dog {
    let dog = a as! Dog
    print(dog.bark())
}

गारंटी के बाद बलपूर्वक कास्ट

यदि आपके कोड का तर्क प्रकार की गारंटी देता है, तो बलपूर्वक कास्ट उस निश्चितता को स्पष्ट करता है। फिर भी, संदेह होने पर as? को प्राथमिकता दीजिए।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
func barkIfDog(_ a: Animal) {
    guard a is Dog else { return }
    let dog = a as! Dog
    print(dog.bark())
}
barkIfDog(Dog(name: "Rex"))

as? और as! की तुलना

as? सुरक्षित है और वैकल्पिक मान लौटाता है; as! बलपूर्वक कास्ट करता है और विफल होने पर क्रैश करता है। अपनी निश्चितता के आधार पर चुनाव कीजिए।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
let safe = a as? Dog
let forced = a as! Dog
print(safe?.bark() ?? "nil")
print(forced.bark())

संग्रहों को बलपूर्वक कास्ट करना

पूरे संग्रहों पर भी बलपूर्वक कास्ट किया जा सकता है, जैसे array as! [Dog], लेकिन हर तत्व के लिए वही क्रैश का जोखिम बना रहता है।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
let animals: [Animal] = [Dog(name: "Rex"), Dog(name: "Buddy")]
let dogs = animals as! [Dog]
for d in dogs { print(d.bark()) }

एक खतरनाक तरीका

गलत तत्व वाले ऐरे को बलपूर्वक कास्ट करने पर प्रोग्राम क्रैश हो जाता है। इसी कारण मिश्रित संग्रहों में प्रत्येक तत्व के लिए as? का उपयोग करना चाहिए।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
let animals: [Animal] = [Dog(name: "Rex"), Cat(name: "Mia")]
// let dogs = animals as! [Dog] // would crash on the Cat
for a in animals {
    if let d = a as? Dog { print(d.bark()) }
}

बलपूर्वक आवरण हटाना बनाम बलपूर्वक कास्ट

as! में मौजूद ! वैचारिक रूप से किसी वैकल्पिक मान का बलपूर्वक आवरण हटाने जैसा है: धारणा सही होने पर सुविधाजनक, लेकिन गलत होने पर खतरनाक।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
let viaOptional = (a as? Dog)!
let viaForce = a as! Dog
print(viaOptional.name, viaForce.name)

सर्वोत्तम अभ्यास

डिफ़ॉल्ट रूप से as? का उपयोग कीजिए। as! को केवल उन स्थितियों के लिए रखें जहाँ विफलता किसी ऐसी प्रोग्रामर-त्रुटि का संकेत होगी जिसे आप विकास के दौरान तुरंत सामने लाना चाहते हैं।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
func process(_ a: Animal) -> String {
    if let d = a as? Dog { return d.bark() }
    return "not a dog"
}
print(process(Dog(name: "Rex")))
print(process(Cat(name: "Mia")))

बलपूर्वक कास्ट का सारांश उदाहरण

जब प्रकार की पुष्टि हो चुकी हो, तो as! साफ़ दिखाई देता है। संदेह होने पर सुरक्षित सशर्त कास्ट सही साधन है।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
let known: Animal = Dog(name: "Rex")
if known is Dog {
    print((known as! Dog).bark())
}

त्वरित जाँच

बलपूर्वक कास्टिंग के खतरे पर विचार कीजिए।

पुनरावलोकन: बलपूर्वक कास्टिंग और उसके जोखिम

आपने सीखा कि as! डाउनकास्ट करके गैर-वैकल्पिक प्रकार में आवरण हटाता है, लेकिन विफल होने पर क्रैश करता है; इसका उपयोग केवल तब करना चाहिए जब प्रकार निश्चित हो, अक्सर is जाँच के बाद, और as? अधिक सुरक्षित डिफ़ॉल्ट बना रहता है।

class Animal {
    let name: String
    init(name: String) { self.name = name }
}
class Dog: Animal {
    func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
    func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
if a is Dog { print((a as! Dog).bark()) } else { print("safe skip") }
शुरुआत निःशुल्क

एआई शिक्षक के साथ Swift सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
122
पाठ
409

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

क्या “as! से अनिवार्य कास्टिंग और उसके जोखिम” पाठ निःशुल्क है?

हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “as! से अनिवार्य कास्टिंग और उसके जोखिम” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“as! से अनिवार्य कास्टिंग और उसके जोखिम” में मैं क्या सीखूँगा?

as! का उपयोग तभी कीजिए जब कास्टिंग के सफल होने की गारंटी हो। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“as! से अनिवार्य कास्टिंग और उसके जोखिम” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. अपकास्टिंग और डाउनकास्टिंग की मूल बातें
  2. as? से सशर्त कास्टिंग
  3. as! से अनिवार्य कास्टिंग और उसके जोखिम
  4. is से प्रकारों की जाँच
← Swift Academy पर वापस जाएँ