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循环不同:
您不能使用break或continue语句退出正文关闭的当前调用或跳过后续调用。
在主体关闭中使用return语句只会从当前的主体调用中退出,而不是从任何外部的作用域中退出,并且不会跳过后续的调用。
https://developer.apple.com/documentation/swift/array/1689783-foreach