我有一个问题,为什么我得到编译错误"在函数中缺少返回"。我正在遵循" Swift编程语言"中的例子。本书,有一节关于将函数作为另一个函数的参数传递。
这是本书编写的精彩例子:
func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool {
for item in list {
if condition (item) {// anonymous function call
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
我理解这一点,但我认为我可以做出微妙的改变,因为我觉得if条件(项目){}是多余的。 这是我的改动:
func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool {
for item in list {
return condition(item)
}//error here with "Missing return in a function expected to return bool"
}
我返回一个bool因为我返回了函数的结果。在for-in循环期间,我不会返回bool。
我不明白为什么不编译,有人可以解释原因吗?
答案 0 :(得分:2)
首先,您的更改不会执行旧代码所做的操作。您的版本返回测试列表中第一个元素的结果,而不是任何元素是否通过测试。
错误的原因是您的代码根本无法保证执行return
。如果列表为空,那么您将在不调用return
的情况下放到函数末尾。编译器告诉你。
答案 1 :(得分:0)
func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return bool
}