gpt4 book ai didi

swift - 为什么设置AVAudioSession类别时不能使用guard?

转载 作者:行者123 更新时间:2023-11-28 13:02:23 24 4
gpt4 key购买 nike

这是一个简单的 Swift 2.0 问题,希望有一个简单的答案:

为什么下面的代码会报错“Ambiguous reference to member setCategory”:

guard AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) else {
//
}

然而这段代码并没有抛出那个错误:

do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
} catch {
//
}

如果这个调用没有失败,我不打算采取任何行动,但我仍然不想使用 try! – 所以我可以 guard这个说法?或者,我是否误解了 guard

最佳答案

来自Control Flow文档:

Early exit
A guard statement, like an if statement, executes statements depending on the Boolean value of an expression. You use a guard statement to require that a condition must be true in order for the code after the guard statement to be executed.

一个典型的例子是

guard <someCondition> else { return }

如果条件不满足,从函数“提前返回”。

但是抛出函数不是 bool 表达式,它们必须在某些“尝试上下文”中被调用,如中所述 Error Handling :

Handling Errors
When a function throws an error, it changes the flow of your program, so it’s important that you can quickly identify places in your code that can throw errors. To identify these places in your code, write the try keyword—or the try? or try! variation—before a piece of code that calls a function, method, or initializer that can throw an error.

所以这是完全不同的事情。 guard 语句不能与抛出函数一起使用。

如果您不关心抛出函数的成功或失败,使用 try? 并忽略结果,如 An elegant way to ignore any errors thrown by a method .在你的情况下:

_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

关于swift - 为什么设置AVAudioSession类别时不能使用guard?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33574452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com