स्विफ्ट 5.1 के लिए अपडेट किया गया
निम्नलिखित फेंकने की क्रिया मान लें:
enum ThrowableError: Error {
case badError(howBad: Int)
}
func doSomething(everythingIsFine: Bool = false) throws -> String {
if everythingIsFine {
return "Everything is ok"
} else {
throw ThrowableError.badError(howBad: 4)
}
}
प्रयत्न
आपके पास 2 विकल्प हैं जब आप एक फ़ंक्शन को कॉल करने का प्रयास करते हैं जो फेंक सकता है।
आप एक कैच ब्लॉक के भीतर अपनी कॉल के द्वारा त्रुटियों को संभालने की जिम्मेदारी ले सकते हैं :
do {
let result = try doSomething()
}
catch ThrowableError.badError(let howBad) {
// Here you know about the error
// Feel free to handle or to re-throw
// 1. Handle
print("Bad Error (How Bad Level: \(howBad)")
// 2. Re-throw
throw ThrowableError.badError(howBad: howBad)
}
या बस फ़ंक्शन को कॉल करने का प्रयास करें, और कॉल श्रृंखला में अगले कॉलर के साथ त्रुटि पास करें:
func doSomeOtherThing() throws -> Void {
// Not within a do-catch block.
// Any errors will be re-thrown to callers.
let result = try doSomething()
}
प्रयत्न!
क्या होता है जब आप इसके अंदर एक शून्य के साथ एक अंतर्निहित अलिखित वैकल्पिक का उपयोग करने की कोशिश करते हैं? हाँ, सच है, एप्लिकेशन CRASH होगा! वही कोशिश के साथ जाता है! यह मूल रूप से त्रुटि श्रृंखला को अनदेखा करता है, और "करो या मरो" स्थिति की घोषणा करता है। यदि फ़ंक्शन को कोई त्रुटि नहीं दी गई, तो सब कुछ ठीक हो जाता है। लेकिन अगर यह विफल हो गया और एक त्रुटि को फेंक दिया, तो आपका आवेदन बस दुर्घटनाग्रस्त हो जाएगा ।
let result = try! doSomething() // if an error was thrown, CRASH!
प्रयत्न?
एक नया कीवर्ड जिसे Xcode 7 बीटा 6 में पेश किया गया था। यह एक वैकल्पिक रिटर्न देता है जो सफल मानों को हटा देता है , और शून्य रिटर्न करके त्रुटि पकड़ता है।
if let result = try? doSomething() {
// doSomething succeeded, and result is unwrapped.
} else {
// Ouch, doSomething() threw an error.
}
या हम गार्ड का उपयोग कर सकते हैं:
guard let result = try? doSomething() else {
// Ouch, doSomething() threw an error.
}
// doSomething succeeded, and result is unwrapped.
यहां एक अंतिम नोट, नोट का उपयोग करके try?
आप उस त्रुटि को छोड़ रहे हैं जो एक शून्य में अनुवादित है। उपयोग का प्रयास करें? जब आप सफलताओं और असफलता पर अधिक ध्यान केंद्रित कर रहे हैं, तो इस बात पर नहीं कि चीजें विफल क्यों हुईं।
सहवर्ती संचालक का उपयोग करना ??
आप कोलेसिंग ऑपरेटर का उपयोग कर सकते हैं ?? कोशिश के साथ? विफलता का डिफ़ॉल्ट मान प्रदान करने के लिए:
let result = (try? doSomething()) ?? "Default Value"
print(result) // Default Value
let result = try doSomething() // Not within a do-catch block
) एक विधि के भीतर से बुलाया जाना है जिसेthrows
सही घोषित किया गया है ? तो, यदिdoSomething()
विफल रहता है, तो बाहरी विधि भी (बदले में) करती है?