ios – 在变量中使用闭包时,swift变量和函数之间有什么区别?

当在变量中使用时,
Swift闭包让我感到困惑.请考虑以下示例

let divide = {(val1: Int, val2: Int) -> Int in 
   return val1 / val2 
}
let result = divide(200, 20)
println(result)

这里除法是一个变量,但它可以带参数.我从其他语言知道,只有函数可以参数.那么,变量和函数之间有什么区别?在swift变量中使用clousure有什么好处?

最佳答案 变量保存/引用值;函数是一个值.因此,变量可以包含/引用数字,字符串,实例以及某些语言的函数.允许变量保存/引用功能的语言是带有’
first class functions‘的语言

封闭的优势在于它们在’lexical scope‘中“捕捉”了价值.例如,假设您需要一个在某些计算完成时执行的回调函数.您希望回调解除视图控制器并记录一些信息:

class MyViewController : ViewController {
  func takeAction (message:String) {
    // do some stuff, then
    doComputation { 
      self.dismissViewController()
      NSLog ("took action: \(message)")
    }
  }
}   

在上面,doComputation的参数是一个闭包;它从闭包的词汇环境中捕获绑定到self和message的值.

点赞