Swift - 从闭包

时间:2017-12-01 04:14:27

标签: swift kotlin

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

2 个答案:

答案 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循环的区别在于两个重要方面:

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

  2.   
  3. 在正文闭包中使用return语句将仅从当前对body的调用退出,而不是从任何外部作用域退出,并且不会跳过后续调用。

  4.   

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