2015-06-11 15 views
9

Ben Xcode 7 beta kullanıyorum çıkıp Swift 2 hicret ettikten sonra atılan edilemez "Çağrı atabilir, ancak global değişken başlatıcıdan hata atılamaz" diyen bir hata mesajı alırsınız. Uygulamam, global bir değişken olması için recorder belgesine dayanıyor. Küresel kalmanın bir yolu var mı, ancak bu sorunları düzeltmek mi? Gelişmiş hata işleme ihtiyacım yok, sadece çalışmasını istiyorum.Çağrı atabilir, ancak hatalar küresel değişken başlatıcısı

cevap

15

Eğer işlev çağrısı bir özel durum olmayacağını biliyorsanız, hata yayılma devre dışı bırakmak için try! ile atma işlevini çağırabilirsiniz. Bir hatanın gerçekten atılması durumunda bunun bir çalışma zamanı istisnası atacağını unutmayın.

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

Source: Apple Error Handling documentation (Disabling Error Propagation)

7

Bu sorunu çözmek için kullanabileceğiniz 3 yol vardır.

  • Kullanarak isteğe bağlı AVAudioRecorder oluşturma?
  • Size AVRecorder'ı iade edeceğini biliyorsanız, dolaylı kullanım deneyebilirsiniz!
  • Ya sonra deneyin kullanma try/catch

kullanarak hatayı işlemek?

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

deneyin kullanma!

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

deneme/yakalama

// 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)") 
}