在保护条款中展开

时间:2015-11-17 23:11:35

标签: swift cocoa swift2

我有这个函数使用func foo(bundle: NSBundle?, _ url: NSURL?)->Bool{ guard let _ = url, let _ = bundle else{ print("crap") return false } return true } 来确保参数是正确的:

{{1}}

我注意到如果任何参数为nil,则会运行else子句。它表现为OR子句。

然而,我需要的是检查BOTH是否为零(AND)。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

如果您实际上并不关心自己的约束价值(假设您没有,请给出func foo(bundle: NSBundle?, _ url: NSURL?) -> Bool { guard url != nil || bundle != nil else { print("crap") return false } return true } 名称),您可以这样做:

guard

如果您确实想要绑定值,则无法使用单个else语句完成此操作。如果它无法从任何一个选项中解包,那么它将执行if let块,如您所知。

如果你仍然使用一个守卫声明,你必须按照我上面的说法,然后在各种func foo(bundle: NSBundle?, _ url: NSURL?) -> Bool { guard url != nil || bundle != nil else { print("crap") return false } if url == nil, let someBundle = bundle { // Handle the bundle only case } else if bundle == nil, let someUrl = url { // Handle the url only case } else if let someUrl = url, let someBundle = bundle { // Handle the case for both } return true } 语句中放入一个适当的解包方法(或者只是省略后卫并有另外一个以下代码中的陈述是错误的情况):

{{1}}

答案 1 :(得分:0)

对于警卫声明而言,这不是真正的工作。你想要的是:

if(url == nil && bundle == nil)
{
    print("crap")
    return false
}
return true