迅速惯用的方式来保护两者并非零

时间:2015-12-18 17:48:15

标签: swift

假设我有两个变量,两个选项:

var a:Int? = 42
var b:Int? = 13

我有条件可以继续进行,只要这些目前都不是。我不假思索地把这样的东西放在一起:

guard let _ = a, let _ = b else { return }

我心不在焉地认为条件是OR,而不是AND。显然那是错的。那么问题就变成了,是否有一种惯用/首选方式来测试它?或者我只是回归基础:

if a == nil && b == nil { return }

除了

如果我使用this post添加的邮件扩展名,那么我可能会高兴地写一些类似

的内容
guard a.notNil || b.notNil else { return }

这是关闭的,因为我可以来"确定(警卫)a不是n或b不是nil"

3 个答案:

答案 0 :(得分:3)

guard实际上是if,所以你可以用同样的方式做到这一点。这很清楚,使用后卫,这似乎是乐趣的一部分。我提供了OR和AND选项,因此您可以选择一个。

func doItOr(a: Int?, b:Int?) {
    guard (a != nil || b != nil) else { return }
    print("either A and B is not nil");
}

func doItAnd(a: Int?, b:Int?) {
    guard (a != nil && b != nil) else { return }
    print("both A and B are not nil");
}


doItOr(nil, b: nil)
doItOr(nil, b: 5)
doItOr(4, b: 5) // prints

doItAnd(nil, b: nil)
doItAnd(nil, b: 5)
doItAnd(nil, b: nil)
doItAnd(4, b: 5) // prints

答案 1 :(得分:1)

  

只要这些目前不是nil

,就可以继续了

你的问题提出了两个完全不同的可能条件,所以为了讨论的目的,我会假设你的意思是这个,即"当前不是两个"。好的,那么:"不是"是!。 "这两种"是&&。所以,像这样:

guard !(a == nil && b == nil) else {return}

答案 2 :(得分:0)

如果你真的不需要将ab绑定为非选项或辨别哪两个是非零,我相信惯用的方法仍然是使用if语句。

我通常使用guard通过绑定选项,向下转换等来缩小参数的特异性。

你似乎没有兴趣在这里这样做。你只想检查它们,所以if似乎恰当地表达了它。