Swift – Salir de la function externa desde el cierre

En Kotlin, puede regresar de una function externa desde un cierre.

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) } 

Salida:

Encontró

En Swift, el retorno sale de la ejecución del cierre

 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) 

Salida:

Encontró

segundo

do

Terminado

¿Hay alguna manera de lograr el mismo resultado en Swift?

    Swift no tiene devoluciones no locales de cierres. En otras palabras, no hay una forma directa de regresar de múltiples niveles. Esto solo funciona con funciones en línea en Kotlin, pero Swift no tiene esta distinción.

    Hay otros methods de recostackción que se detienen una vez que se encuentra un elemento, por ejemplo, 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 } } 

    Oye, rápido, te gusta esto

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

    }

    además

    El uso del método forEach es distinto de un bucle for-in de dos maneras importantes:

    1. No puede utilizar una instrucción break o continue para salir de la llamada actual del cierre del cuerpo u omitir llamadas posteriores.

    2. El uso de la statement de devolución en el cierre del cuerpo saldrá solo de la llamada actual al cuerpo, no de un scope externo, y no saltará las llamadas posteriores.

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