var anArray = [3, 2, 1]
func sortAndCheck(array: inout [Int]) -> Bool{
    array.sort()
    return array.contains(3)
}

if anArray.contains(3){
    print(anArray) // Prints [3, 2, 1]
}

if anArray.contains(3) && sortAndCheck(array: &anArray){
    print(anArray) // Prints [1, 2, 3]
}

对于第二个if语句,既然anArray.contains(3)已经是真的,那么为什么sortAndCheck(array: &anArray)仍然得到评估并排序混乱?swift - 逻辑运算符无法正常运行的快速短路-LMLPHP

最佳答案

短路意味着表达式的下一部分仅在结果已清除时才求值。如果&&之前的部分是true,则结果仍然可以是falsetrue,必须对下一部分进行评估。
这些案例包括:

1. true && true => true
2. true && false => false
3. false && false => false
4. false && true => false

在计算左操作数之后,我们得到:
true && ??

在案例1或案例2中,结果可能不同。
另一方面,如果我们有:
false && ??

然后结果将是案例3或案例4,它们都false并且表达式将短路。

08-06 00:56