Swift实现“或”操作符的3种方法示例

2020-01-09 00:13:08王振洲

然后使用定义好的值调用一下:


let res = or(vLeft, getRightRes())
print("or: (res)n")

打印结果为:

getting the right value...
or: true

大家有没有发现一个问题,即使我左侧的值vLeft为true了,获取右侧值的函数getRightRes依然被执行了。试想如果右侧函数是个比较消耗性能或费时的操作,在已经确定结果为true的情况下,再去执行右侧函数,则非常没有必要了!

那有没有办法解决这个问题呢?当然有,请看第二种方式。

第二种:

这种方式使用了闭包的概念。函数的第一个参数还是Bool类型的值,但第二个参数改为了一个返回值为Bool类型的闭包。(我们会把getRightRes函数放在闭包中执行)代码如下:


func or(_ value1: Bool, _ value2: () -> Bool) -> Bool {
  if value1 {
    return true
  }
  return value2()
}

这段代码的意思就是,如果value1为true直接返回true,如果value1为false,则返回value2闭包的返回值。

这个函数的调用如下:


let res = or(vLeft) { () -> Bool in
  return getRightRes()
}
print("or: (res)n")

执行结果如下: