这是一个简单的Swift 2.0问题,希望有一个简单的答案:
为什么以下代码会给出错误“对成员setCategory的模糊引用”:
guard AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) else {
//
}
然而,这段代码并没有抛出这个错误:
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
} catch {
//
}
如果此次通话没有失败,我不打算采取任何行动,但我仍然不想使用try!
- 我可以guard
这句话吗?或者,我误解了guard
?
答案 0 :(得分:2)
来自Control Flow文档:
提前退出
guard
语句与if
语句一样,执行语句 在表达式的布尔值上。您使用guard
语句 要求条件必须为true才能使代码在。之后 保护声明将被执行。
典型的例子是
guard <someCondition> else { return }
如果不满足条件,从函数“提前返回”。
但抛出函数不是布尔表达式, 他们必须在某些“尝试上下文”中被调用,如中所述 Error Handling:
处理错误
当函数抛出错误时,它会改变程序的流程, 因此,您可以快速识别代码中的位置 这可能会引发错误。要在代码中标识这些位置,请写入 在一段代码之前的try
关键字或try?
或try!
变体 调用可能引发错误的函数,方法或初始化程序。
所以这是完全不同的事情。 guard
语句
不能与投掷功能一起使用。
如果您不关心投掷功能的成功或失败,
使用try?
并忽略结果,如
An elegant way to ignore any errors thrown by a method。在你的情况下:
_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)