संबद्ध प्रकारों पर बाधाएँ
जेनेरिक संदर्भों में संबद्ध प्रकारों को सीमित कीजिए।
संबद्ध प्रकारों पर बाधाएँ, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
संबद्ध प्रकारों का पुनरावलोकन
कोई प्रोटोकॉल associatedtype के साथ एक संबद्ध प्रकार घोषित कर सकता है, जिसे अनुरूप होने वाला प्रकार भरता है। कंटेनर प्रोटोकॉल में Element इसका सामान्य उदाहरण है।
protocol Container {
associatedtype Item
var count: Int { get }
func item(at i: Int) -> Item
}ठोस प्रकार के साथ अनुरूप होना
अनुरूप होने वाला प्रकार संबद्ध प्रकार को निश्चित करता है, जो अक्सर उसके उपयोग के तरीके से अपने-आप निर्धारित हो जाता है।
protocol Container {
associatedtype Item
func item(at i: Int) -> Item
}
struct IntBox: Container {
let values: [Int]
func item(at i: Int) -> Int { values[i] }
}
print(IntBox(values: [10, 20]).item(at: 1))संबद्ध प्रकार पर प्रतिबंध
घोषणा में ही प्रतिबंध जोड़ें: associatedtype Item: Comparable प्रत्येक अनुरूप प्रकार के आइटम-प्रकार को तुलना का समर्थन करने के लिए बाध्य करता है।
protocol Sorted {
associatedtype Item: Comparable
var items: [Item] { get }
}
struct Nums: Sorted { let items: [Int] }
print(Nums(items: [3, 1, 2]).items.sorted())प्रतिबंध का उपयोग
संबद्ध प्रकार पर प्रतिबंध होने के कारण, प्रोटोकॉल विस्तार उस क्षमता पर भरोसा कर सकते हैं।
protocol Sorted {
associatedtype Item: Comparable
var items: [Item] { get }
}
extension Sorted {
var smallest: Item? { items.min() }
}
struct Nums: Sorted { let items: [Int] }
print(Nums(items: [5, 2, 8]).smallest!)associatedtype पर where
Swift किसी संबद्ध प्रकार पर where खंड की अनुमति भी देता है, ताकि उसे किसी अन्य संबद्ध प्रकार या नेस्टेड प्रकार से जोड़ा जा सके।
protocol Sequence2 {
associatedtype Element
associatedtype Iterator: IteratorProtocol where Iterator.Element == Element
}किसी अन्य प्रोटोकॉल तक प्रतिबंधित करना
किसी संबद्ध प्रकार के लिए यह आवश्यक किया जा सकता है कि वह आपके द्वारा परिभाषित किसी प्रोटोकॉल के अनुरूप हो, जिससे व्यवहार की कई परतें बनती हैं।
protocol HasName { var name: String { get } }
protocol Registry {
associatedtype Entry: HasName
var entries: [Entry] { get }
}
struct User: HasName { let name: String }
struct Users: Registry { let entries: [User] }
print(Users(entries: [User(name: "Ada")]).entries[0].name)एकाधिक संबद्ध प्रकार
कोई प्रोटोकॉल कई संबद्ध प्रकार घोषित कर सकता है और प्रत्येक पर स्वतंत्र रूप से प्रतिबंध लगा सकता है।
protocol Mapping {
associatedtype Key: Hashable
associatedtype Value
func value(for k: Key) -> Value?
}
struct Phonebook: Mapping {
let data: [String: Int]
func value(for k: String) -> Int? { data[k] }
}
print(Phonebook(data: ["x": 1]).value(for: "x")!)डिफ़ॉल्ट संबद्ध प्रकार
आप = के साथ किसी संबद्ध प्रकार को डिफ़ॉल्ट मान दे सकते हैं, जिसका उपयोग तब होता है जब अनुरूप होने वाला प्रकार उसे अलग से निर्दिष्ट नहीं करता।
protocol Producer {
associatedtype Output = String
func make() -> Output
}
struct Hello: Producer {
func make() -> String { "hi" }
}
print(Hello().make())प्रतिबंध generic एल्गोरिदम सक्षम करते हैं
प्रतिबंधित संबद्ध प्रकार के साथ, प्रोटोकॉल विस्तार सभी अनुरूप प्रकारों में साझा किए जा सकने वाले वास्तविक एल्गोरिदम लागू कर सकता है।
protocol Scored {
associatedtype Score: Comparable
var scores: [Score] { get }
}
extension Scored {
var best: Score? { scores.max() }
}
struct Game: Scored { let scores: [Int] }
print(Game(scores: [10, 40, 25]).best!)विस्तारों में समान-प्रकार प्रतिबंध
प्रोटोकॉल के बाहर, उसका विस्तार करते समय संबद्ध प्रकार पर और अधिक प्रतिबंध लगाए जा सकते हैं।
protocol Box2 {
associatedtype Content
var content: Content { get }
}
extension Box2 where Content == Int {
var doubled: Int { content * 2 }
}
struct IB: Box2 { let content: Int }
print(IB(content: 7).doubled)प्रतिबंध क्यों लगाएँ
संबद्ध प्रकारों पर प्रतिबंध लगाना ही वह तरीका है जिससे प्रोटोकॉल generic और शक्तिशाली दोनों बने रहते हैं: यह प्रतिबंध ऐसा आश्वासन है जिस पर विस्तार और उसे कॉल करने वाला कोड भरोसा कर सकते हैं।
protocol Listy {
associatedtype E: Equatable
var elements: [E] { get }
}
extension Listy {
func has(_ x: E) -> Bool { elements.contains(x) }
}
struct L: Listy { let elements: [String] }
print(L(elements: ["a", "b"]).has("b"))त्वरित जाँच
संबद्ध प्रकारों पर प्रतिबंध लगाने की अपनी समझ जाँचें।
पुनरावलोकन
आप संबद्ध प्रकारों पर सीधे प्रतिबंध लगा सकते हैं (associatedtype Item: Comparable), उन्हें where खंडों से जोड़ सकते हैं, प्रोटोकॉल अनुरूपता आवश्यक कर सकते हैं, = से डिफ़ॉल्ट दे सकते हैं, कई संबद्ध प्रकार घोषित कर सकते हैं और विस्तारों में उन्हें और विशिष्ट बना सकते हैं। प्रतिबंध प्रोटोकॉल विस्तारों को साझा, प्रकार-सुरक्षित एल्गोरिदम लागू करने देते हैं।
एआई शिक्षक के साथ Swift सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 122
- पाठ
- 409
अक्सर पूछे जाने वाले प्रश्न
क्या “संबद्ध प्रकारों पर बाधाएँ” पाठ निःशुल्क है?
हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “संबद्ध प्रकारों पर बाधाएँ” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“संबद्ध प्रकारों पर बाधाएँ” में मैं क्या सीखूँगा?
जेनेरिक संदर्भों में संबद्ध प्रकारों को सीमित कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“संबद्ध प्रकारों पर बाधाएँ” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- टाइप पैरामीटर की बाधाएँ
- फ़ंक्शन पर where क्लॉज़
- संबद्ध प्रकारों पर बाधाएँ
- जेनेरिक सबस्क्रिप्ट और एक्सटेंशन