त्रुटि सँभालने वाले ऑपरेटर
catch, retry और replaceError से समस्या से उबरिए।
त्रुटि सँभालने वाले ऑपरेटर, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
कम्बाइन में त्रुटियाँ
कम्बाइन के publisher में एक विफलता प्रकार होता है। जब कोई publisher विफल होता है, तो वह स्ट्रीम समाप्त कर देता है — इसके बाद कोई और मान नहीं भेजा जाता। मज़बूत पाइपलाइन बनाने के लिए आपको ऐसे ऑपरेटर चाहिए जो त्रुटियों को संभालें, बदलें या उनसे उबरें।
विफलता का प्रकार
हर publisher एक Output और एक Failure घोषित करता है। कोई पाइपलाइन तभी संकलित होती है जब त्रुटि के प्रकार एक-दूसरे से मेल खाते हों, इसलिए विफलताओं को बदलने वाले ऑपरेटर आम हैं।
let publisher: AnyPublisher<Data, URLError> = apiClient.request()
// Output = Data, Failure = URLErrorcatch
कैच किसी विफलता को बीच में पकड़ता है और विफल publisher की जगह एक नया publisher रख देता है। इससे किसी समस्या की स्थिति में आप वैकल्पिक मान दे सकते हैं।
apiClient.fetchUser()
.catch { error in
Just(User.guest)
}
.sink { user in
print("Got", user.name)
}
.store(in: &cancellables)replaceError
replaceError(with:) catch का सरल रूप है: यह किसी भी विफलता को एकल वैकल्पिक मान से बदल देता है और सफलता के साथ पूरा हो जाता है।
apiClient.fetchCount()
.replaceError(with: 0)
.sink { count in
self.badge.text = "\(count)"
}
.store(in: &cancellables)retry
retry(n) विफल होने पर अपस्ट्रीम से अधिकतम n बार फिर से subscribe करता है। यह अस्थायी नेटवर्क त्रुटियों के लिए आदर्श है।
apiClient.fetchData()
.retry(3)
.sink(receiveCompletion: { print($0) },
receiveValue: { print($0) })
.store(in: &cancellables)retry और catch को संयोजित करना
एक सामान्य लचीला तरीका: कुछ बार retry करें, फिर सभी प्रयास विफल होने पर वैकल्पिक व्यवस्था के लिए catch का उपयोग करें।
apiClient.fetchData()
.retry(2)
.catch { _ in
Just(Data())
}
.sink { data in
self.process(data)
}
.store(in: &cancellables)mapError
mapError एक त्रुटि प्रकार को दूसरे में बदलता है। ऊपर से आने वाली विभिन्न विफलताओं को एकल ऐप-स्तरीय त्रुटि प्रकार में एकीकृत करने के लिए यह आवश्यक है।
enum AppError: Error { case network }
apiClient.request()
.mapError { _ in AppError.network }
.sink(receiveCompletion: { _ in }, receiveValue: { _ in })
.store(in: &cancellables)mapError क्यों महत्वपूर्ण है
जब आप प्रकाशकों को संयोजित करते हैं, तो उनके Failure प्रकारों का मेल खाना आवश्यक है। mapError असंगत त्रुटियों को सामान्य रूप देता है, ताकि merge और zip जैसे संचालक संकलित हो सकें और आपका sink एक ही त्रुटि प्रकार को संभाल सके।
setFailureType
कुछ प्रकाशकों, जैसे Just, का विफलता प्रकार Never होता है। setFailureType(to:) उन्हें जोड़ता है, ताकि वे विफल होने वाले प्रकाशकों के साथ संयोजित हो सकें।
Just(42)
.setFailureType(to: AppError.self)
.merge(with: failablePublisher)
.sink(receiveCompletion: { _ in }, receiveValue: { _ in })
.store(in: &cancellables)पूर्णता संभालना
sink में, पूर्णता फ़ंक्शन आपको बताता है कि धारा पूरी हुई है या विफल हो गई है। ऊपर की प्रक्रिया में जिन त्रुटियों से उबरा नहीं जा सका, उन पर प्रतिक्रिया देने के लिए इसकी जाँच करें।
publisher.sink(
receiveCompletion: { completion in
if case .failure(let error) = completion {
self.showAlert(error)
}
},
receiveValue: { value in
self.update(value)
}
).store(in: &cancellables)लचीली पाइपलाइनों की रूपरेखा बनाना
त्रुटि संभालने की सर्वोत्तम प्रथाएँ:
- क्षणिक विफलताओं के लिए retry का उपयोग करें
- वैकल्पिक व्यवस्थाओं के लिए catch या replaceError का उपयोग करें
- त्रुटि प्रकारों को एकीकृत करने के लिए mapError का उपयोग करें
sinkमें विफलता की स्थिति को हमेशा संभालें
त्वरित जाँच
त्रुटि संभालने संबंधी अपनी जानकारी जाँचें।
पुनरावलोकन
आपने कंबाइन के त्रुटि-संभाल संचालक सीखे:
- catch / replaceError — वैकल्पिक व्यवस्थाएँ प्रदान करते हैं
- retry — विफलता पर फिर से प्रयास करता है
- mapError / setFailureType — त्रुटि प्रकारों को एकीकृत करते हैं
साथ मिलकर, ये आपको ऐसी पाइपलाइन बनाने देते हैं जो पहली त्रुटि पर बंद होने के बजाय सहज रूप से सीमित क्षमता में काम करती रहें।
एआई शिक्षक के साथ Swift सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 122
- पाठ
- 409
अक्सर पूछे जाने वाले प्रश्न
क्या “त्रुटि सँभालने वाले ऑपरेटर” पाठ निःशुल्क है?
हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “त्रुटि सँभालने वाले ऑपरेटर” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“त्रुटि सँभालने वाले ऑपरेटर” में मैं क्या सीखूँगा?
catch, retry और replaceError से समस्या से उबरिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“त्रुटि सँभालने वाले ऑपरेटर” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- स्ट्रीम को रूपांतरित और संयोजित करना
- शेड्यूलर और थ्रेडिंग
- त्रुटि सँभालने वाले ऑपरेटर
- कस्टम पब्लिशर और सब्सक्राइबर