Xcode 7 Beta4で2.0にアップデート
私はこのコードブロックを持っています
do
{
try AVAudioSession.sharedInstance().setActive(true)
} catch let err as NSError
{
println("Dim background error")
}
そして、それは私にエラーを与えます(try
行で)
ここからスローされたエラーは処理されません。
これはコンパイラエラーですか、それとも構文に欠けているものがありますか?
ドキュメントを確認したところ、コードは「正しく見えます」。
AVAudioSession.sharedInstance().setActive(true)
はどのような種類のエラーをスローできますか?NSError
sしかスローできない場合は、エラーをキャッチするときにこれを指定する必要はありません。あなたは単に書くことができます:
do {
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print("Dim background error")
}
catch
-スコープでエラーを使用する場合でも、アクセスできます。 Swiftはスローされたエラーを自動的にerror
にバインドします。これは、次のように使用できます。
catch {
// do something with `error`
}
メソッドが複数のタイプのエラーをスローし、NSError
sであるものだけを処理したい場合は、条件付きでそれらをバインドできます。
catch let specialError as NSError {
// do something with `specialError`
}
ただし、スローされたすべてのエラーが処理されることを確認する必要があります。したがって、メソッドがRandomError
(今作成したばかり)もスローできると仮定すると、次のように記述する必要があります。
catch let randomError as RandomError {
// do something with `randomError`
}
... catch
のNSError
に加えて。
または、もちろん一般的なケースを使用することもできます。
catch {
// do something with `error`
}
したがって、catch
ステートメントからlet err as NSError
を削除することで、問題を解決できると思います。
コンパイラのバグである可能性があります。とにかくlet err as NSError
を削除してみてください;すべてのエラーをキャッチしたい場合は、catch
だけで十分です。
また、Swift 2では、print
ではなくprintln
を使用する必要があります。
次のコードは、XCode 7 Beta4でエラーなしでコンパイルされます。
import AVFoundation
class X {
func y() {
do {
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print("Dim background error \(error)")
}
}
}