Swift - 从闭包中退出外部函数

Gre*_*per 6 kotlin swift

在 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)
   }
Run Code Online (Sandbox Code Playgroud)

输出:

成立

在 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)
Run Code Online (Sandbox Code Playgroud)

输出:

成立

C

完全的

有没有办法在 Swift 中实现相同的结果?

eph*_*ent 5

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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 最后,有人理解这个问题(至少和我一样)。 (2认同)