एक्सटेंशन में डिफ़ॉल्ट इम्प्लीमेंटेशन
प्रोटोकॉल एक्सटेंशन के ज़रिए साझा व्यवहार उपलब्ध कराइए।
एक्सटेंशन में डिफ़ॉल्ट इम्प्लीमेंटेशन, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
समस्या
प्रोटोकॉल आवश्यकताएँ घोषित करते हैं, लेकिन कोई व्यवहार उपलब्ध नहीं कराते। यदि हर अनुरूप प्रकार को वही तर्क दोहराना पड़े, तो कोड दोहराया जाएगा। प्रोटोकॉल विस्तार डिफ़ॉल्ट कार्यान्वयन उपलब्ध कराकर इस समस्या का समाधान करते हैं।
protocol Greeter {
func greet() -> String
}डिफ़ॉल्ट जोड़ना
प्रोटोकॉल पर बना विस्तार किसी आवश्यकता का कार्यान्वयन कर सकता है। अनुरूप प्रकारों को यह व्यवहार अपने-आप मिल जाता है, जब तक वे इसे अधिलेखित न करें।
protocol Greeter { func greet() -> String }
extension Greeter {
func greet() -> String { "Hello!" }
}
struct Robot: Greeter {}
print(Robot().greet())डिफ़ॉल्ट को अधिलेखित करना
कोई अनुरूप प्रकार अपना कार्यान्वयन दे सकता है, जिसे विस्तार के डिफ़ॉल्ट पर प्राथमिकता मिलती है।
protocol Greeter { func greet() -> String }
extension Greeter { func greet() -> String { "Hello!" } }
struct French: Greeter {
func greet() -> String { "Bonjour!" }
}
print(French().greet())अतिरिक्त विधियाँ जोड़ना
विस्तार ऐसी बिल्कुल नई विधियाँ जोड़ सकते हैं जो प्रोटोकॉल में कहीं भी नहीं हैं। हर अनुरूप प्रकार को वे अपने-आप मिल जाती हैं।
protocol Named { var name: String { get } }
extension Named {
func loudName() -> String { name.uppercased() }
}
struct City: Named { let name: String }
print(City(name: "paris").loudName())डिफ़ॉल्ट गणना किए गए गुणधर्म
विस्तार गणना किए गए गुणधर्म भी डिफ़ॉल्ट के रूप में उपलब्ध करा सकते हैं।
protocol Sized {
var width: Double { get }
var height: Double { get }
}
extension Sized {
var area: Double { width * height }
}
struct Rect: Sized { let width: Double; let height: Double }
print(Rect(width: 2, height: 5).area)आवश्यकताओं पर आधारित निर्माण
डिफ़ॉल्ट कार्यान्वयन प्रोटोकॉल की अपनी आवश्यकताओं को बुला सकता है और ऐसा करके उस न्यूनतम अनुबंध से अधिक समृद्ध व्यवहार बना सकता है जिसे हर प्रकार को पूरा करना आवश्यक है।
protocol Summable {
var values: [Int] { get }
}
extension Summable {
var total: Int { values.reduce(0, +) }
}
struct Cart: Summable { let values: [Int] }
print(Cart(values: [10, 20, 30]).total)शर्तबद्ध विस्तार
where खंड का उपयोग कीजिए, ताकि डिफ़ॉल्ट तभी लागू हो जब अतिरिक्त शर्तें पूरी हों। यहाँ डिफ़ॉल्ट केवल तब मौजूद है जब Self भी Equatable हो।
protocol Container {
associatedtype Item
var items: [Item] { get }
}
extension Container where Item: Equatable {
func contains(_ x: Item) -> Bool { items.contains(x) }
}
struct Bag: Container { let items: [Int] }
print(Bag(items: [1, 2, 3]).contains(2))डिफ़ॉल्ट और आवश्यकता साथ-साथ
आप प्रोटोकॉल में कोई विधि घोषित कर सकते हैं और उसका डिफ़ॉल्ट भी दे सकते हैं। उसे प्रोटोकॉल में सूचीबद्ध करने से प्रोटोकॉल प्रकार के माध्यम से गतिशील प्रेषण संभव होता है।
protocol Logger {
func log() -> String
}
extension Logger {
func log() -> String { "default log" }
}
struct A: Logger {}
struct B: Logger { func log() -> String { "B log" } }
let loggers: [Logger] = [A(), B()]
for l in loggers { print(l.log()) }स्थिर प्रेषण की सावधानी
यदि कोई विधि केवल विस्तार में है, प्रोटोकॉल में नहीं, तो प्रोटोकॉल-प्रकार वाले मान के माध्यम से की गई कॉल विस्तार वाले संस्करण का उपयोग करती है, भले ही ठोस प्रकार ने अपना संस्करण परिभाषित किया हो। गतिशील प्रेषण के लिए उसे प्रोटोकॉल में घोषित कीजिए।
protocol P {}
extension P { func who() -> String { "P-default" } }
struct Q: P { func who() -> String { "Q" } }
let direct = Q()
let asP: P = Q()
print(direct.who())
print(asP.who())अनावश्यक लिखाई कम करना
छोटी-सी आवश्यक सतह और समृद्ध डिफ़ॉल्ट का संयोजन प्रोटोकॉल-उन्मुख डिज़ाइन का केंद्र है: अनुरूप प्रकार न्यूनतम भाग लागू करते हैं और साझा व्यवहार एक ही स्थान पर रहता है।
protocol Identifiable { var id: Int { get } }
extension Identifiable {
var tag: String { "ID-" + String(id) }
}
struct Order: Identifiable { let id: Int }
print(Order(id: 7).tag)कई विस्तारों का संयोजन
व्यवस्था बनाए रखने के लिए आप डिफ़ॉल्ट को कई विस्तारों में बाँट सकते हैं; वे सभी अनुरूप प्रकार में अपना योगदान देते हैं।
protocol Money { var cents: Int { get } }
extension Money { var dollars: Double { Double(cents) / 100 } }
extension Money { var label: String { "$" + String(format: "%.2f", dollars) } }
struct Price: Money { let cents: Int }
print(Price(cents: 1299).label)त्वरित जाँच
प्रोटोकॉल विस्तार के डिफ़ॉल्ट की अपनी समझ जाँचिए।
पुनरावलोकन
प्रोटोकॉल विस्तार डिफ़ॉल्ट कार्यान्वयन उपलब्ध कराते हैं, जिससे अनुरूप प्रकार साझा व्यवहार प्राप्त कर सकते हैं और आवश्यकता पड़ने पर उसे अधिलेखित कर सकते हैं। आप अतिरिक्त विधियाँ और गणना किए गए गुणधर्म जोड़ सकते हैं, डिफ़ॉल्ट को where से शर्तबद्ध कर सकते हैं, और आपने स्थिर तथा गतिशील प्रेषण का नियम देखा: गतिशील प्रेषण के लिए विधि को प्रोटोकॉल में घोषित कीजिए।
एआई शिक्षक के साथ Swift सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 122
- पाठ
- 409
अक्सर पूछे जाने वाले प्रश्न
क्या “एक्सटेंशन में डिफ़ॉल्ट इम्प्लीमेंटेशन” पाठ निःशुल्क है?
हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “एक्सटेंशन में डिफ़ॉल्ट इम्प्लीमेंटेशन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“एक्सटेंशन में डिफ़ॉल्ट इम्प्लीमेंटेशन” में मैं क्या सीखूँगा?
प्रोटोकॉल एक्सटेंशन के ज़रिए साझा व्यवहार उपलब्ध कराइए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“एक्सटेंशन में डिफ़ॉल्ट इम्प्लीमेंटेशन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- अनुबंध के रूप में प्रोटोकॉल
- एक्सटेंशन में डिफ़ॉल्ट इम्प्लीमेंटेशन
- Protocol Composition
- सशर्त अनुरूपता