स्विफ्ट में 'कैच ऑल' अपवाद का विवरण कैसे प्रिंट करें?


84

मैं स्विफ्ट का उपयोग करने के लिए अपना कोड अपडेट कर रहा हूं, और मैं सोच रहा हूं कि एक अपवाद के लिए त्रुटि विवरण कैसे प्रिंट किया जाए जो 'कैच ऑल' क्लॉज से मेल खाता है। मैंने अपनी बात को स्पष्ट करने के लिए इस स्विफ्ट भाषा गाइड पेज से उदाहरण को थोड़ा संशोधित किया है :

do {
    try vend(itemNamed: "Candy Bar")
    // Enjoy delicious snack
} catch VendingMachineError.InvalidSelection {
    print("Invalid Selection.")
} catch VendingMachineError.OutOfStock {
    print("Out of Stock.")
} catch VendingMachineError.InsufficientFunds(let amountRequired) {
    print("Insufficient funds. Please insert an additional $\(amountRequired).")
} catch {
    // HOW DO I PRINT OUT INFORMATION ABOUT THE ERROR HERE?
}

यदि मैं एक अप्रत्याशित अपवाद को पकड़ता हूं, तो मुझे इसके कारण के बारे में कुछ लॉग करने में सक्षम होने की आवश्यकता है।

जवाबों:


121

मैं इसे समझ गया। मैंने स्विफ्ट डॉक्यूमेंटेशन में इस लाइन पर ध्यान दिया:

यदि कैच क्लॉज एक पैटर्न को निर्दिष्ट नहीं करता है, तो क्लॉज किसी भी त्रुटि को स्थानीय स्थिर नाम की त्रुटि से मेल खाएगा और बांध देगा

तो, फिर मैंने यह कोशिश की:

do {
    try vend(itemNamed: "Candy Bar")
...
} catch {
    print("Error info: \(error)")
}

और इसने मुझे एक अच्छा वर्णन दिया।


47

से स्विफ्ट प्रोग्रामिंग भाषा :

यदि कोई catchखंड एक पैटर्न निर्दिष्ट नहीं करता है, तो खंड स्थानीय मिलान नाम की किसी भी त्रुटि से मेल खाएगा और बांध देगा error

यही है, let errorइस catchखंड में एक निहित है :

do {
    // …
} catch {
    print("caught: \(error)")
}

वैकल्पिक रूप से, ऐसा लगता है कि let constant_nameयह भी एक मान्य पैटर्न है, इसलिए आप इसका उपयोग त्रुटि स्थिरांक का नाम बदलने के लिए कर सकते हैं (यदि यह नाम errorपहले से ही उपयोग में है तो यह संभव हो सकता है ):

do {
    // …
} catch let myError {
   print("caught: \(myError)")
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.