鉴于我可以做这样的闭包
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
只是被命名为闭包。有没有办法使这项工作?
答案 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()