iOS पर गड़बड़ी ठीक करना

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 कोड के मतलब बताए गए हैं. आपको ये कोड दिख सकते हैं:

टेबल: 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 तब दिखता है, जब कोई ऐसी गड़बड़ी होती है जिसे गड़बड़ी के किसी अन्य कोड का इस्तेमाल करके कैटगरी में नहीं रखा जा सकता. उदाहरण के लिए, यह गड़बड़ी तब दिख सकती है, जब किसी बाहरी एपीआई से मिली स्टेटस वैल्यू में, असल वजह के बारे में ज़रूरत के मुताबिक जानकारी न हो.