14

私は Xcode 7 ベータ版を使用しており、Swift 2 に移行した後、次のコード行でいくつかの問題が発生しました。

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

「呼び出しはスローできますが、グローバル変数初期化子からエラーをスローできません」というエラーが表示されます。recorder私のアプリは、 がグローバル変数であることに依存しています。それをグローバルに保ちながら、これらの問題を修正する方法はありますか? 高度なエラー処理は必要ありません。機能させたいだけです。

4

2 に答える 2

25

関数呼び出しが例外をスローしないことがわかっている場合は、例外をスローする関数を呼び出して、try!エラーの伝播を無効にすることができます。エラーが実際にスローされた場合、実行時例外がスローされることに注意してください。

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

出典: Apple エラー処理ドキュメント (エラー伝播の無効化)

于 2015-08-04T23:57:27.840 に答える
14

この問題を解決するために使用できる 3 つの方法があります。

  • try を使用してオプションの AVAudioRecorder を作成しますか?
  • AVRecorder が返されることがわかっている場合は、暗黙的に try! を使用できます。
  • または、try / catch を使用してエラーを処理します

試してみますか?

// 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)")
}
于 2015-06-11T09:24:34.597 に答える