(Swift)混淆函数内for-in循环的返回值和循环后(函数内)的返回值)

8qgya5xd  于 2023-05-21  发布在  Swift
关注(0)|答案(3)|浏览(148)

我对下面的代码感到困惑。

func allTestsPassed(tests: [Bool]) -> Bool {
    for test in tests {
        if test == false {
            return false
        }
    }
    return true
}

如果if-else语句中的代码(在for-in循环中)执行,则返回false。
但是for-in循环之后的代码是:return true .
一个函数返回两个不同的布尔值。
当我执行print(allTestsPassed([false]))时,它会输出'false'。
它似乎忽略了循环后的'return true'。
我不明白。

nfzehxib

nfzehxib1#

return在那里停止进程,并且在它之后不执行任何操作。它只是在那里停止了这个过程。
要了解更多,让我们更新逻辑并查看结果。

func allTestsPassed(tests: [Bool]) -> Bool {
    print("start of logic")
    var currentNumber : Int = 1
    for test in tests {
        print("currentNumber=\(currentNumber) with value==\(test)")
        if test == false {
            print("returning number because data is false")
            return false
        }
        currentNumber += 1
    }
    print("end of logic")
    return true
}

案例一:所有输入均为真

现在让我们尝试case 1,其中所有输入都是true

allTestsPassed(tests: [true, true, true, true])

结果是

start of logic
currentNumber=1 with value==true
currentNumber=2 with value==true
currentNumber=3 with value==true
currentNumber=4 with value==true
end of logic

案例二:其中一个输入为false

allTestsPassed(tests: [true, true, false, true])

结果是

start of logic
currentNumber=1 with value==true
currentNumber=2 with value==true
currentNumber=3 with value==false
returning number because data is false

如果在第二种情况下看到,则不会看到end of logic,因为它在test=false时返回
希望日志能让你明白…

gkl3eglg

gkl3eglg2#

让我们详细解释一下你发布的函数:

func allTestsPassed(tests: [Bool]) -> Bool {
    for test in tests {
        if test == false {
            return false
        }
    }
    return true
}

这个函数有一个for循环,它迭代一个方法,该方法接收一个布尔数组参数并返回一个布尔值。
for循环中的条件检查数组中的每个元素,并查看其值是否为false。如果是,方法allTestsPassed返回false,因为(我猜)其中一个测试失败了。
如果数组中没有一个参数的值为false,那么这意味着(同样是猜测)所有的测试都通过了,这就是为什么for循环完成了它的迭代并返回true行。

**一般来说,当你在代码中放置一个return语句时,这意味着它下面的任何其他行都不会执行。因为在你的方法中,第一个return语句被一个条件包围着,所以只有当条件计算为true时,它才会执行。

希望这能澄清一些事情。

htrmnn0y

htrmnn0y3#

return不只是指定函数应该返回什么值-它还将控件 * 返回 * 给调用者。当执行allTestsPassed中的return语句时,不会执行allTestsPassed中的其他代码。执行将在您调用allTestsPassed的位置继续。
它类似于breakcontinue,因为它会导致执行“跳转”到其他地方。
请参阅Swift语言参考:
return语句出现在函数或方法定义的主体中,并导致程序执行返回到调用函数或方法。程序执行在紧接函数或方法调用之后的点处继续。
如果你这样称呼它:

print(allTestsPassed([false]))

传递[false]将导致if语句中的return执行,因此allTestsPassed的其余部分不会执行。执行返回到调用方。在这种情况下,print被调用,无论返回什么值。

相关问题