Swift में त्रुटि प्रबंधन: try/catch और उन्नत तकनीकें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Swift में त्रुटि प्रबंधन: try/catch और भी बहुत कुछ — उन्नत स्तर



त्रुटि प्रबंधन किसी भी गंभीर iOS/macOS डेवलपमेंट का एक अनिवार्य हिस्सा है। Swift एक शक्तिशाली और अभिव्यंजक त्रुटि प्रबंधन प्रणाली प्रदान करता है, जो सामान्य try/catch से कहीं आगे जाती है। इस लेख में, हम उन्नत तकनीकों पर चर्चा करेंगे: Error प्रोटोकॉल के साथ काम करना, त्रुटि एनम, कीवर्ड throws, rethrows, साथ ही Result प्रकार और कार्यात्मक दृष्टिकोण। यह सामग्री उन डेवलपर्स के लिए है जो Swift की मूल बातों से पहले से परिचित हैं।



1. Error प्रोटोकॉल और कस्टम त्रुटि प्रकार



Swift में त्रुटि प्रबंधन का आधार Error प्रोटोकॉल है। इस प्रोटोकॉल का पालन करने वाला कोई भी प्रकार त्रुटि के रूप में फेंका जा सकता है। अक्सर इसके लिए एनम (enum) का उपयोग किया जाता है।



import Foundation

// नेटवर्क अनुरोध के लिए कस्टम त्रुटि प्रकार परिभाषित करनाenum NetworkError: Error { case invalidURL case noData case decodingFailed(description: String) case serverError(statusCode: Int)}

// फ़ंक्शन जो त्रुटि फेंक सकता हैfunc fetchUserData(from urlString: String) throws -> Data { guard let url = URL(string: urlString) else { throw NetworkError.invalidURL }

// नेटवर्क अनुरोध का अनुकरण let success = Bool.random() if !success { throw NetworkError.serverError(statusCode: 500) }

return Data()}


एनम का उपयोग संबंधित त्रुटियों को समूहित करने और अतिरिक्त जानकारी (associated values) पास करने की अनुमति देता है, जिससे कोड अधिक पठनीय और स्व-दस्तावेजीकरण हो जाता है।



2. do-catch का उन्नत उपयोग



do-catch ब्लॉक त्रुटियों को पकड़ने का मुख्य उपकरण है। उन्नत स्तर पर, विभिन्न प्रकार की त्रुटियों को अलग-अलग तरीके से संभालने में सक्षम होना महत्वपूर्ण है।



func processUserData() {    do {        let data = try fetchUserData(from: "https://api.example.com/user")        // डेटा के साथ काम करना        print("डेटा प्राप्त हुआ: \\(data.count) बाइट्स")    } catch NetworkError.invalidURL {        print("त्रुटि: अमान्य URL")    } catch NetworkError.serverError(let code) where code >= 500 {        print("कोड \\(code) के साथ सर्वर त्रुटि। बाद में पुनः प्रयास करें।")    } catch let error as NetworkError {        print("नेटवर्क त्रुटि: \\(error)")    } catch {        // अन्य सभी त्रुटियों को संभालना        print("अज्ञात त्रुटि: \\(error.localizedDescription)")    }}


मुख्य बिंदु:

  • where के साथ पैटर्न मिलान: अतिरिक्त शर्तों (जैसे, प्रतिक्रिया कोड की सीमा) के आधार पर त्रुटियों को फ़िल्टर करने की अनुमति देता है।
  • प्रकार रूपांतरण (as): यदि आप कई प्रकार की त्रुटियों की उम्मीद करते हैं, तो आप catch let error as MyErrorType का उपयोग कर सकते हैं।
  • सार्वभौमिक catch: हमेशा अंतिम होना चाहिए, क्योंकि यह किसी भी अनियंत्रित त्रुटि को पकड़ लेता है।


3. कीवर्ड throws, rethrows और त्रुटियों का प्रसार



कीवर्ड throws इंगित करता है कि फ़ंक्शन त्रुटि फेंक सकता है। rethrows एक अधिक सूक्ष्म तंत्र है: यह कहता है कि फ़ंक्शन केवल त्रुटि फेंक सकता है यदि इसके क्लोज़र पैरामीटर (closure) में से किसी ने त्रुटि फेंकी हो।



// throws वाला फ़ंक्शन — स्वयं त्रुटि फेंक सकता हैfunc loadConfig() throws -> [String: String] {    // ...    throw NetworkError.noData}

// rethrows वाला फ़ंक्शन — क्लोज़र से त्रुटि को आगे बढ़ाता हैfunc performWithRetry(times: Int, operation: () throws -> Void) rethrows { for _ in 0..<times { try operation() }}

// उपयोगdo { try performWithRetry(times: 3) { try loadConfig() }} catch { print("3 प्रयासों के बाद ऑपरेशन विफल: \\(erro

ब्लॉग

पुस्तक अनुशंसाएँ