在收盘后立即调用快速功能?

时间:2015-09-09 10:55:17

标签: swift

鉴于我可以做这样的闭包

var test = { () -> String in
   return "this works"
}()

我想你可以做这样的事情

func testFunc() {
   let _ = "this doesn't work"
}()

但这会引发错误 - Consecutive statements on a line must be separated by ';'

据我所知,swift的func只是被命名为闭包。有没有办法使这项工作?

3 个答案:

答案 0 :(得分:1)

因为没有接受

的语法
func testFunc() {} ()

所以它应该是

func testFunc() {
   let myString = "this works"
}

并致电

func myFunc() {
   testFunc() 
}

答案 1 :(得分:1)

Swift中有三种类型的闭包:

  
      
  • 全局函数是具有名称且不捕获任何值的闭包。
  •   
  • 嵌套函数是具有名称的闭包,可以从其封闭函数中捕获值。
  •   
  • Closure表达式是一种未命名的闭包,用轻量级语法编写,可以从周围的上下文中捕获值。
  •   
     

...

     

Closure表达式是一种在内容中编写内联闭包的方法,   重点语法。

(来源:Swift一书中的Closures。)

在你的第一个例子中:

var test = { () -> String in return "this works" }()

{ ... }是一个闭包表达式。此表达式已评估 使用空参数列表()。结果是字符串 “这有用”,然后将其分配给变量。

你的第二个例子是全局函数。 全局函数是(命名)闭包,但不是闭包表达式。 (据我所知)没有类似的方法来定义一个函数 立即评估。

答案 2 :(得分:0)

func定义了一个函数。如果你想调用它,你需要在一个单独的声明中这样做:

func testFunc() {
  let _ = "this doesn't work"
}

testFunc()