然后使用定义好的值调用一下:
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")
执行结果如下:








