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:) को कॉल करता है और यूनिट में खाना नहीं बचा होता है.ऐसा, Home API के प्रोजेक्ट के कोटे से ज़्यादा अनुरोध करने की वजह से भी हो सकता है. ज़्यादा जानकारी के लिए, कोटा मैनेजमेंट देखें. |
unauthenticated |
कॉल करने वाले की पहचान नहीं की जा सकी या अनुरोध में पुष्टि करने वाले मान्य क्रेडेंशियल नहीं हैं. |
unavailable |
यह सेवा उपलब्ध नहीं है. यह कुछ समय के लिए होने वाली गड़बड़ी हो सकती है. इसे ठीक करने के लिए, कुछ समय बाद फिर से कोशिश करें. ध्यान दें कि नॉन-आइडमपोटेंट कार्रवाइयों को फिर से आज़माना हमेशा सुरक्षित नहीं होता. |
unimplemented |
अनुरोध की गई कार्रवाई को इस सेवा में लागू नहीं किया गया है, यह काम नहीं करती या इसे चालू नहीं किया गया है. |
unknown |
ऐसी गड़बड़ी जिसकी कोई जानकारी नहीं है. आम तौर पर, unknown तब दिखता है, जब कोई ऐसी गड़बड़ी होती है जिसे गड़बड़ी के किसी अन्य कोड का इस्तेमाल करके कैटगरी में नहीं रखा जा सकता. उदाहरण के लिए, यह गड़बड़ी तब दिख सकती है, जब किसी बाहरी एपीआई से मिली स्टेटस वैल्यू में, असल वजह के बारे में ज़रूरत के मुताबिक जानकारी न हो. |