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