我有这个函数使用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)。
我该怎么做?
答案 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