在 Swift 函数中,为什么 'return' 必须在 for 循环之外,当函数包含 for 循环且循环内有 if 语句时?
In Swift functions, why 'return' must be outside for loop, when function includes a for loop with if statement inside the loop?
假设一个 returning 函数:
func check(scores: [Int]) -> Bool {
for score in scores {
if score < 80 {
return false
}
}
return true
}
以上代码完美运行。但是下面的代码没有。弹出一条错误消息:预期 return 'Bool' 的函数中缺少 return。我很清楚这个错误,但我不知道它为什么会出现在这里:
func check(scores: [Int]) -> Bool {
for score in scores {
if score < 80 {
return false
}
else {
return true
}
}
}
为什么'return false'可以在if条件{}里面,而'return true'不能在else{}里面,必须完全在for循环外面……?我特地问这个是因为下面的代码工作得很好而且 'return true' 在 else {}
里面
func isPassingGrade(for scores: [Int]) -> Bool {
var total = 0
for score in scores {
total += score
}
if total >= 500 {
return true
} else {
return false
}
}
任何见解都非常感谢和亲切的问候。
这是因为如果scores
此处为空
,for循环可能根本不执行的假设
func check(scores: [Int]) -> Bool {
for score in scores {
if score < 80 {
return false
}
else {
return true
}
}
}
所以函数需要知道它应该 return 在那种情况下,你的第一个和最后一个块没问题,因为可以保证某些 Bool 值将被 returned,以防万一for循环是否执行
In case you ask that the sent array will not be empty , yes but at compile time there is no way to know that , hence the error
如果scores
为空,for
循环体将不会执行,check
函数也不会return
任何东西。但是,它确实承诺 return
一个 Bool
,这就是它出错的原因。
假设一个 returning 函数:
func check(scores: [Int]) -> Bool {
for score in scores {
if score < 80 {
return false
}
}
return true
}
以上代码完美运行。但是下面的代码没有。弹出一条错误消息:预期 return 'Bool' 的函数中缺少 return。我很清楚这个错误,但我不知道它为什么会出现在这里:
func check(scores: [Int]) -> Bool {
for score in scores {
if score < 80 {
return false
}
else {
return true
}
}
}
为什么'return false'可以在if条件{}里面,而'return true'不能在else{}里面,必须完全在for循环外面……?我特地问这个是因为下面的代码工作得很好而且 'return true' 在 else {}
里面func isPassingGrade(for scores: [Int]) -> Bool {
var total = 0
for score in scores {
total += score
}
if total >= 500 {
return true
} else {
return false
}
}
任何见解都非常感谢和亲切的问候。
这是因为如果scores
此处为空
func check(scores: [Int]) -> Bool {
for score in scores {
if score < 80 {
return false
}
else {
return true
}
}
}
所以函数需要知道它应该 return 在那种情况下,你的第一个和最后一个块没问题,因为可以保证某些 Bool 值将被 returned,以防万一for循环是否执行
In case you ask that the sent array will not be empty , yes but at compile time there is no way to know that , hence the error
如果scores
为空,for
循环体将不会执行,check
函数也不会return
任何东西。但是,它确实承诺 return
一个 Bool
,这就是它出错的原因。