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