在右括号后调用swift函数?

在右括号后调用swift函数?,swift,Swift,考虑到我可以这样做闭包 var test = { () -> String in return "this works" }() func testFunc() { let _ = "this doesn't work" }() 我想你可以做这样的事 var test = { () -> String in return "this works" }() func testFunc() { let _ = "this doesn't work" }()

考虑到我可以这样做闭包

var test = { () -> String in
   return "this works"
}()
func testFunc() {
   let _ = "this doesn't work"
}()
我想你可以做这样的事

var test = { () -> String in
   return "this works"
}()
func testFunc() {
   let _ = "this doesn't work"
}()
但这会抛出一个错误-
行上的连续语句必须用“;”分隔


据我回忆,斯威夫特的
func
s只是命名为闭包。有什么方法可以实现这一点吗?

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

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

testFunc()

因为没有接受的语法

func testFunc() {} ()
应该如此

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

func myFunc() {
   testFunc() 
}

Swift中有三种类型的闭包:

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

闭包表达式是一种简单编写内联闭包的方法, 重点语法

(来源:Swift手册。)

在您的第一个示例中:

var test = { () -> String in return "this works" }()
{…}
是一个闭包表达式。将对该表达式求值 参数列表为空
()
。结果是字符串 “this works”然后分配给变量

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

是否有任何参考,您可以指出它的定义,即什么是
func
定义,它是一个语句?在Swift中,每个。始终首先检查苹果的文档:)在您的第一个示例中,您有一个“立即评估的闭包”。结果是一个字符串,然后将其分配给变量。在第二个示例中,我不清楚您想要什么。我希望在函数定义之后立即调用函数,而不要过于冗长。也许Swift手册的这一部分会有所帮助:“闭包表达式是一种用简洁、集中的语法编写内联闭包的方法“–在第一个示例中有一个闭包表达式,但在第二个示例中没有。一个(全局)函数是一个特殊的(命名的)闭包,但不是闭包表达式。谢谢@MartinR,我认为这两个注释绝对值得一个回复帖子!