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