Swift में, रनटाइम के दौरान ठीक की जा सकने वाली गड़बड़ियों को थ्रो और कैच करने की सुविधा पहले से मौजूद होती है. उदाहरण के लिए, अगर आपके कोड में कोई कार्रवाई पूरी नहीं होती है या मान्य नहीं है, तो एपीआई HomeError गड़बड़ी दिखाता है. इससे गड़बड़ियों को ठीक करने की प्रोसेस आसान और बेहतर हो जाती है. ऐसा इसलिए, क्योंकि इससे सिर्फ़ उन गड़बड़ियों पर ध्यान दिया जा सकता है जिन्हें ठीक किया जा सकता है. इसके बाद, आपके पास विकल्प होते हैं. जैसे, उपयोगकर्ता को फिर से कोशिश करने की अनुमति देना या "स्ट्रक्चर नहीं मिला" जैसा मैसेज दिखाना. साथ ही, आपको हर संभावित अपवाद को साफ़ तौर पर हैंडल करने की ज़रूरत नहीं होती. इसलिए, आपका कोड कम अव्यवस्थित होता है और इस वजह से, अपने मुख्य मकसद पर ज़्यादा फ़ोकस करता है.
गड़बड़ी को ठीक करने का एक उदाहरण:
let light1 = lightDevices.first
if let light = light1 {
do {
try await structure.move(device: light, to: room)
} catch let error as HomeError {
// Code for handling the exception
}
इस टेबल में, HomeError कोड के मतलब दिए गए हैं. ये कोड आपको दिख सकते हैं:
| कोड | मतलब |
|---|---|
aborted |
कार्रवाई रद्द कर दी गई. आम तौर पर, यह गड़बड़ी तब दिखती है, जब एक साथ कई अनुरोध किए जाते हैं. जैसे, क्रम की जांच पूरी न हो पाना या लेन-देन रद्द हो जाना. |
alreadyExists |
जिस संसाधन या इकाई को बनाने की कोशिश की जा रही है वह पहले से मौजूद है. उदाहरण के लिए, यह थर्मोस्टैट के लिए तय किया गया कोई शेड्यूल हो सकता है. |
cancelled |
कार्रवाई रद्द कर दी गई थी. आम तौर पर, ऐसा कॉल करने वाला व्यक्ति करता है. |
dataLoss |
डेटा को वापस नहीं पाया जा सकता या डेटा खराब हो गया. |
deadlineExceeded |
कार्रवाई पूरी होने से पहले समयसीमा खत्म हो गई. सिस्टम की स्थिति में बदलाव करने वाली कार्रवाइयों के लिए, यह गड़बड़ी तब भी दिख सकती है, जब कार्रवाई पूरी हो गई हो. उदाहरण के लिए, सर्वर से मिलने वाले जवाब में इतनी देरी हो सकती है कि समयसीमा खत्म हो जाए. |
failedPrecondition |
इस कार्रवाई को अस्वीकार कर दिया गया है, क्योंकि सिस्टम उस स्थिति में नहीं है जिसमें कार्रवाई को पूरा किया जा सकता है. उदाहरण के लिए, अगर आपने पहले से बंद ओवन पर stop को कॉल किया है, तो आपको यह मैसेज मिल सकता है. |
internal |
सिस्टम की गड़बड़ियां. इसका मतलब है कि सिस्टम के कुछ इनवेरिएंट टूट गए हैं. यह गड़बड़ी कोड, गंभीर गड़बड़ियों के लिए रिज़र्व किया गया है. |
invalidArgument |
क्लाइंट ने एक अमान्य तर्क बताया. ध्यान दें कि यह `failedPrecondition` से अलग है. `invalidArgument` से पता चलता है कि सिस्टम की स्थिति कुछ भी हो, आर्ग्युमेंट में समस्याएं हैं. उदाहरण के लिए, फ़ाइल का नाम गलत फ़ॉर्मैट में है. |
notFound |
आपने ऐसी इकाई या संसाधन के बारे में बताया है जो नहीं मिल सका. उदाहरण के लिए, मीडिया प्लेयर डिवाइस पर
play को कॉल करते समय, ऐसे ट्रैक आईडी को सेट करना जो मौजूद नहीं है. |
outOfRange |
सिस्टम की मौजूदा स्थिति के हिसाब से, किसी पैरामीटर की वैल्यू मान्य सीमा से ज़्यादा है. यह मैसेज तब दिखता है, जब वैल्यू, एपीआई कॉल के लिए मान्य वैल्यू की रेंज में होती है. हालांकि, मौजूदा संदर्भ में इसका कोई मतलब नहीं होता. |
permissionDenied |
आपके पास यह कार्रवाई करने की अनुमति नहीं है. इस गड़बड़ी के कोड का यह मतलब नहीं है कि अनुरोध मान्य है. |
resourceExhausted |
कुछ संसाधन खत्म हो गए हैं. उदाहरण के लिए, यह तब थ्रो किया जा सकता है, जब कोई व्यक्ति पालतू जानवर के फ़ीडर डिवाइस पर
dispense(item:amount:unit:presetName:) कॉल करता है और यूनिट में खाना नहीं बचा होता है. |
unauthenticated |
कॉल करने वाले की पहचान नहीं की जा सकती या अनुरोध में पुष्टि करने के मान्य क्रेडेंशियल नहीं हैं. |
unavailable |
यह सेवा उपलब्ध नहीं है. यह एक अस्थायी समस्या है. कुछ समय बाद फिर से कोशिश करने पर, यह ठीक हो सकती है. ध्यान दें कि गैर-आईडम्पोटेंट कार्रवाइयों को फिर से आज़माना हमेशा सुरक्षित नहीं होता. |
unimplemented |
अनुरोध की गई कार्रवाई, इस सेवा में लागू नहीं की गई है, काम नहीं करती है या चालू नहीं है. |
unknown |
ऐसी गड़बड़ी जिसकी कोई जानकारी नहीं है. आम तौर पर, unknown तब दिखता है, जब कोई ऐसी गड़बड़ी होती है जिसे किसी अन्य गड़बड़ी कोड का इस्तेमाल करके कैटगरी में नहीं रखा जा सकता. उदाहरण के लिए, यह गड़बड़ी तब दिख सकती है, जब किसी बाहरी एपीआई से मिली स्टेटस वैल्यू में गड़बड़ी की वजह के बारे में पूरी जानकारी न हो. |