Swift – 从闭包中退出外层函数

在Kotlin中,你可以从闭包的外层函数返回。

fun main(args: Array) { val letters = listOf("A", "B", "C") fun lookForLetter(letter: String, letters: List){ letters.forEach { l -> if (l == letter) { println("Found") return } println(l) } println("Completed") } lookForLetter("A", letters = letters) } 

输出:

发现

在Swift中,返回结束的执行

 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中实现相同的结果?

Swift没有来自关闭的非本地回报。 换句话说,没有直接的方法可以退出多个层面。 这只适用于Kotlin的内联函数,但Swift没有这个区别。

还有其他的收集方法,一旦find元素就停止,例如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 } } 

嘿嘿,你这样做

 func lookForLetter(letter: String, letters: [String]) { for l in letters { if l == letter { print("Found"); return; } print(l) } print("Completed") 

}

使用forEach方法在两个重要方面与for-in循环不同:

  1. 您不能使用break或continue语句退出正文关闭的当前调用或跳过后续调用。

  2. 在主体关闭中使用return语句只会从当前的主体调用中退出,而不是从任何外部的作用域中退出,并且不会跳过后续的调用。

https://developer.apple.com/documentation/swift/array/1689783-foreach