在Kotlin中,您可以从闭包中返回外部函数。
fun main(args: Array<String>) {
val letters = listOf("A", "B", "C")
fun lookForLetter(letter: String, letters: List<String>){
letters.forEach { l ->
if (l == letter) {
println("Found")
return
}
println(l)
}
println("Completed")
}
lookForLetter("A", letters = letters)
}
输出:
实测值
在Swift中,return退出闭包的执行
var letters = ["A", "B", "C"]
func lookForLetter(letter: String, letters: [String]) {
letters.forEach { (l) in
if l == letter {
print("Found");
return
}
print(l)
}
print("Completed")
}
lookForLetter(letter: "A", letters: letters)
输出:
实测值
乙
C
已完成
有没有办法在Swift中实现相同的结果?
答案 0 :(得分:3)
Swift没有来自闭包的非本地回报。换句话说,没有直接的方法可以退出多个级别。这仅适用于Kotlin中的内联函数,但Swift没有这种区别。
有一些其他集合方法在找到元素后停止,例如index(where:)
。
func lookForLetter(letter: String, letters: [String]) {
guard let _ = letters.index(where: { (l) in
if l == letter {
print("Found");
return true
}
print(l)
return false
}) else {
print("Completed")
return
}
}
答案 1 :(得分:0)
嘿,你很喜欢这个
func lookForLetter(letter: String, letters: [String]) {
for l in letters {
if l == letter {
print("Found");
return;
}
print(l)
}
print("Completed")
}
也
使用forEach方法与for-in循环的区别在于两个重要方面:
您不能使用break或continue语句退出正文闭包的当前调用或跳过后续调用。
- 醇>
在正文闭包中使用return语句将仅从当前对body的调用退出,而不是从任何外部作用域退出,并且不会跳过后续调用。
https://developer.apple.com/documentation/swift/array/1689783-foreach