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 कोड के मतलब दिए गए हैं. ये कोड आपको दिख सकते हैं:
| Code | मतलब |
|---|---|
aborted |
कार्रवाई रद्द कर दी गई. यह गड़बड़ी आम तौर पर तब दिखती है, जब एक साथ कई अनुरोध किए जाते हैं. जैसे, क्रम की जांच में गड़बड़ी या लेन-देन रद्द होना. |
alreadyExists |
जिस संसाधन या इकाई को बनाने की कोशिश की जा रही है वह पहले से मौजूद है. उदाहरण के लिए, यह थर्मोस्टैट के लिए तय किया गया कोई शेड्यूल हो सकता है. |
cancelled |
कार्रवाई रद्द कर दी गई थी. आम तौर पर, ऐसा कॉल करने वाले व्यक्ति ने किया था. |
dataLoss |
डेटा को वापस नहीं पाया जा सकता या डेटा खराब हो गया. |
deadlineExceeded |
कार्रवाई पूरी होने से पहले समयसीमा खत्म हो गई. सिस्टम की स्थिति में बदलाव करने वाली कार्रवाइयों के लिए, यह गड़बड़ी तब भी दिख सकती है, जब कार्रवाई पूरी हो गई हो. उदाहरण के लिए, सर्वर से मिलने वाले जवाब में इतनी देरी हो सकती है कि समयसीमा खत्म हो जाए. |
failedPrecondition |
इस कार्रवाई को अस्वीकार कर दिया गया है, क्योंकि सिस्टम उस स्थिति में नहीं है जिसमें कार्रवाई को पूरा किया जा सकता है. उदाहरण के लिए, अगर आपने पहले से बंद ओवन पर stop को कॉल किया है, तो आपको यह मैसेज मिल सकता है. |
internal |
सिस्टम में गड़बड़ियां. इसका मतलब है कि सिस्टम के कुछ इनवेरिएंट टूट गए हैं. यह गड़बड़ी कोड, गंभीर गड़बड़ियों के लिए रिज़र्व किया गया है. |
invalidArgument |
क्लाइंट ने एक अमान्य तर्क बताया. ध्यान दें कि यह `failedPrecondition` से अलग है. `invalidArgument` से पता चलता है कि सिस्टम की स्थिति कुछ भी हो, आर्ग्युमेंट में समस्या है. उदाहरण के लिए, फ़ाइल का नाम गलत फ़ॉर्मैट में है. |
notFound |
आपने ऐसी इकाई या संसाधन के बारे में बताया है जो नहीं मिला. उदाहरण के लिए, मीडिया प्लेयर डिवाइस पर
play को कॉल करते समय, ऐसे ट्रैक आईडी को सेट करना जो मौजूद नहीं है. |
outOfRange |
सिस्टम की मौजूदा स्थिति के आधार पर, किसी पैरामीटर की वैल्यू मान्य सीमा से ज़्यादा है. यह मैसेज तब दिखता है, जब वैल्यू, एपीआई कॉल के लिए मान्य वैल्यू की रेंज में होती है. हालांकि, मौजूदा संदर्भ में इसका कोई मतलब नहीं होता. |
permissionDenied |
आपके पास यह कार्रवाई करने की अनुमति नहीं है. इस गड़बड़ी के कोड का यह मतलब नहीं है कि अनुरोध मान्य है. |
resourceExhausted |
कुछ संसाधन खत्म हो गए हैं. उदाहरण के लिए, यह तब दिख सकता है, जब कोई व्यक्ति पालतू जानवरों को खाना देने वाले डिवाइस पर
dispense(item:amount:unit:presetName:) को कॉल करता है और यूनिट में खाना नहीं बचा होता है.ऐसा Home APIs प्रोजेक्ट के लिए तय सीमा से ज़्यादा अनुरोध करने की वजह से भी हो सकता है. ज़्यादा जानकारी के लिए, कोटा मैनेजमेंट देखें. |
unauthenticated |
कॉलर की पहचान नहीं की जा सकती या अनुरोध में पुष्टि करने के मान्य क्रेडेंशियल नहीं हैं. |
unavailable |
यह सेवा उपलब्ध नहीं है. यह सबसे अधिक संभावना एक क्षणिक स्थिति है, जिसे बैकऑफ़ के साथ फिर से कोशिश करके ठीक किया जा सकता है. ध्यान दें कि गैर-आईडम्पोटेंट कार्रवाइयों को फिर से आज़माना हमेशा सुरक्षित नहीं होता. |
unimplemented |
अनुरोध की गई कार्रवाई, इस सेवा में लागू नहीं की गई है, काम नहीं करती है या चालू नहीं है. |
unknown |
ऐसी गड़बड़ी जिसकी कोई जानकारी नहीं है. आम तौर पर, unknown तब दिखता है, जब कोई ऐसी गड़बड़ी होती है जिसे किसी अन्य गड़बड़ी कोड का इस्तेमाल करके कैटगरी में नहीं रखा जा सकता. उदाहरण के लिए, यह गड़बड़ी तब दिख सकती है, जब किसी बाहरी एपीआई से मिली स्टेटस वैल्यू में गड़बड़ी की वजह के बारे में पूरी जानकारी न हो. |