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