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