फेंकने वाली त्रुटियों के साथ टाइप-सुरक्षित होने का कोई आसान तरीका नहीं है। इस पर विचार करें, यदि कंपाइलर ने आपको throws MyErrorType
निर्दिष्ट करने की अनुमति दी है, तो उसे उस फ़ंक्शन बॉडी के भीतर भी सुनिश्चित करना होगा कि आप try
फ़ंक्शन में नहीं हैं जो संभवतः एक डू/कैच ब्लॉक के बाहर एक अलग प्रकार को फेंक सकता है। (वैसे है लेकिन यह अनावश्यक जटिलता की परतों को जोड़ देगा)। स्विफ्ट कंपाइलर पहले से ही धीमा हो सकता है और प्रकारों को घुमाने के दौरान लूप में फंस सकता है, फेंकने वाले कार्यों की एक श्रृंखला ऊपर फेंकने वाले प्रकारों को घुमाने में एक दुःस्वप्न हो सकता है।
चल रहा विचार यह है कि अधिकांश त्रुटियों के लिए आप किसी भी तरह से तरीकों के एक छोटे से सबसेट में उन्हें संभालने जा रहे हैं।
कहा जा रहा है, वहाँ आप अतिरिक्त catch let error as MyErrorType
खंड जोड़ने के लिए की आवश्यकता नहीं है, तो आप बस इतना की तरह एक कैच ब्लॉक में एक स्विच का उपयोग कर सकते हैं:
do {
try something()
} catch let e {
switch e {
case let m as MyErrorType: handleMyError(m)
case let o as OtherErrorType: handleOther(o)
case is ThirdErrorType: print("error \(e)")
default: handleElse(e)
}
}
नहीं, आप नहीं ... –
संबंधित कर सकते हैं: http://stackoverflow.com/questions/30740997/what-is-the-difference-between-swift-2-0-do-try-catch-and-regular-java-cc-ex। –