2015-06-11 6 views
9

मैं Xcode 7 बीटा का उपयोग कर रहा से बाहर और स्विफ्ट 2 की ओर पलायन के बाद फेंक दिया नहीं जा सकता मैं कोड की इस पंक्ति के साथ कुछ मुद्दों का अनुभव:कॉल फेंक सकते हैं, लेकिन त्रुटियों एक वैश्विक चर प्रारंभकर्ता

let recorder = AVAudioRecorder(URL: soundFileURL, settings: recordSettings as! [String : AnyObject]) 

मैं एक त्रुटि प्राप्त करें "कॉल फेंक सकता है, लेकिन वैश्विक वैरिएबल प्रारंभकर्ता से त्रुटियों को नहीं हटाया जा सकता है"। मेरा ऐप वैश्विक चर होने के लिए recorder पर निर्भर करता है। क्या इसे वैश्विक रखने का कोई तरीका है लेकिन इन मुद्दों को ठीक करें? मुझे उन्नत त्रुटि प्रबंधन की कोई आवश्यकता नहीं है, मैं बस इसे काम करना चाहता हूं।

उत्तर

15

आप जानते हैं कि आपके समारोह कॉल एक अपवाद फेंक नहीं होगा, तो आप त्रुटि प्रचार निष्क्रिय करने के लिए try! साथ फेंक समारोह कॉल कर सकते हैं। ध्यान दें कि यदि कोई त्रुटि वास्तव में फेंक दी जाती है तो यह रनटाइम अपवाद फेंक देगा।

let recorder = try! AVAudioRecorder(URL: soundFileURL, settings: recordSettings as! [String : AnyObject]) 

Source: Apple Error Handling documentation (Disabling Error Propagation)

7

इस समस्या को हल करने के लिए आप 3 तरीके हैं जिनका उपयोग आप कर सकते हैं।

  • प्रयास करके वैकल्पिक AVAudioRecorder बनाना?
  • यदि आप जानते हैं कि यह आपको AVRecorder वापस कर देगा, तो आप निहितार्थ का उपयोग कर सकते हैं!
  • या तो ट्राई/कैच

कोशिश का उपयोग का उपयोग कर त्रुटि संभाल?

// notice that it returns AVAudioRecorder? 
if let recorder = try? AVAudioRecorder(URL: soundFileURL, settings: recordSettings) { 
    // your code here to use the recorder 
} 

कोशिश का उपयोग करना!

// this is implicitly unwrapped and can crash if there is problem with soundFileURL or recordSettings 
let recorder = try! AVAudioRecorder(URL: soundFileURL, settings: recordSettings) 

ट्राई/कैच

// The best way to do is to handle the error gracefully using try/catch 
do { 
    let recorder = try AVAudioRecorder(URL: soundFileURL, settings: recordSettings) 
} catch { 
    print("Error occurred \(error)") 
} 
संबंधित मुद्दे