Swift 函数期望返回值时如何使用Guard
我是Swift语句的粉丝 有一件事我还没有完全理解,那就是如何(甚至是否)在期望返回值的Swift 函数期望返回值时如何使用Guard,swift,return,guard,Swift,Return,Guard,我是Swift语句的粉丝 有一件事我还没有完全理解,那就是如何(甚至是否)在期望返回值的函数中使用它 简单的例子: func refreshAudioMix() -> AVPlayerItem? { guard let originalAsset = rootNC.lastAssetLoaded else { return nil } let asset = originalAsset.copy() as! AVAsset ..... return
函数中使用它
简单的例子:
func refreshAudioMix() -> AVPlayerItem? {
guard let originalAsset = rootNC.lastAssetLoaded else {
return nil
}
let asset = originalAsset.copy() as! AVAsset
..... return AVPlayerItem ....
}
这种方法的问题是每次都需要检查返回值。我正在试图了解我是否正确地处理了这个问题,或者甚至可能guard
在这里根本不需要
谢谢我想说,使用防护装置并没有错。当您正在操作的对象的概率为零时,返回可选值似乎是公平的
还有另外一种方法(至少,但我现在没有看到其他方法)来处理这个问题:写下你的函数可以抛出一个错误,当你在guard语句的可选值中找到nil时抛出它。您甚至可以创建错误,以便于阅读。你可以
样本:
enum CustomError: Error {
case errorOne
case errorTwo
case errorThree
}
func refreshAudioMix() throws -> AVPlayerItem {
guard let originalAsset = rootNC.lastAssetLoaded else {
throw CustomError.errorOne
}
let asset = originalAsset.copy() as! AVAsset
..... return AVPlayerItem ....
}
您正确地使用了guard
,但是“这种方法的问题是每次都需要检查返回值。”??请举例说明。在您的示例中,您正确使用了guard,只需知道您可以在此函数中返回可选值。您看到了吗?@NikhilManapure guard expect return call在“else”语句中,如果我在“void”函数中使用guard,就足够了。函数返回值的次数(例如:->Int,->UIView)。我需要在guard“else”语句中返回nil,而不是每次调用此函数时,我都需要再次检查nil或实际值,这是“guard”最初的想法。。这就是为什么我认为我可能没有正确使用它。“你觉得怎么样?”亲爱的,你的朋友帮了我很多忙。谢谢。抛出一个错误而不是返回nil
是一个非常糟糕的主意。处理抛出函数需要比处理可选函数更多的样板代码,抛出错误不会增加任何额外的意义。然而,它确实存在,并且在苹果文档中呈现出来,这取决于代码中的nil值意味着什么。对我来说,它可以增加一个额外的意义,在我们的应用程序中,处理可选的是非常常见的,所以我想说这取决于具体情况。你能展示一下你提到的文档部分吗?我敢肯定,苹果不会鼓励人们通过抛出错误而不是使用众多内置方法中的一种来处理可选项,从而增加代码的复杂性。看看我回答中的链接,要么我看不出你在说什么,要么你误解了文档中的某些内容。我只能看到苹果提到将错误转换为可选项,而你却在用另一种方式谈论它。。。