使用Xcode 7 Beta 4更新到2.0
我有这个代码块
do
{
try AVAudioSession.sharedInstance().setActive(true)
} catch let err as NSError
{
println("Dim background error")
}
Run Code Online (Sandbox Code Playgroud)
它给了我错误(try在线)
从这里抛出的错误不会被处理.
这是编译器错误还是我的语法中缺少某些东西?
我检查了文档,我的代码"看起来"正确.
Mar*_*sel 17
可以AVAudioSession.sharedInstance().setActive(true)抛出哪些类型的错误?
如果它只能抛出NSErrors,那么在捕获错误时不需要指定它.你可以简单地写:
do {
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print("Dim background error")
}
Run Code Online (Sandbox Code Playgroud)
如果要在catch-scope中使用错误,仍可以访问它.Swift会自动将抛出的错误绑定到error,可以使用:
catch {
// do something with `error`
}
Run Code Online (Sandbox Code Playgroud)
如果该方法抛出多种类型的错误,并且您只想处理NSErrors 的那些错误,则可以有条件地绑定它们:
catch let specialError as NSError {
// do something with `specialError`
}
Run Code Online (Sandbox Code Playgroud)
但是,您必须确保处理每个抛出的错误.所以假设该方法也可以抛出RandomError(我现在刚刚编写),你必须写:
catch let randomError as RandomError {
// do something with `randomError`
}
Run Code Online (Sandbox Code Playgroud)
......除catch的NSError.
或者你当然可以使用一般情况:
catch {
// do something with `error`
}
Run Code Online (Sandbox Code Playgroud)
因此,我认为您的问题可以通过let err as NSError从您的catch-statement中删除来解决.
可能是编译器错误。无论如何尝试删除let err as NSError;catch如果你想捕获所有错误,单独就足够了。
另外,对于 Swift 2,您应该使用print,而不是println。
以下代码在 XCode 7 Beta 4 上编译不会出现错误:
import AVFoundation
class X {
func y() {
do {
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print("Dim background error \(error)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10870 次 |
| 最近记录: |