在Swift中返回func的func
这让我在操场上犯了一个错误在Swift中返回func的func,swift,Swift,这让我在操场上犯了一个错误 func returnAFunc() -> () { func f(){ println("hello") } return f } 现在我把它理解为一个名为“returnAFunc”的func,它返回另一个不返回值的func。对的但它不起作用。我必须这样做: func returnAFunc() -> () -> () // or this (() -> ()) { func f(){ println("h
func returnAFunc() -> ()
{
func f(){ println("hello") }
return f
}
现在我把它理解为一个名为“returnAFunc”的func,它返回另一个不返回值的func。对的但它不起作用。我必须这样做:
func returnAFunc() -> () -> () // or this (() -> ())
{
func f(){ println("hello") }
return f
}
好吧,那似乎不对。有人能解释一下吗?第一个示例的内容是“Function
returnAFunc
不带参数,也不返回值”。第二个示例正确地将返回类型定义为“FunctionreturnAFunc
不带参数,并且返回一个不带参数,也不返回参数的函数。”
当然,语法有点不稳定,但是一旦你习惯了它,你就可以很容易地看到发生了什么
此外,Swift类型void
表示为“()
”,因此您也可以将其解释为“FunctionreturnAFunc
接受一个void参数(这意味着没有参数)并返回一个void类型(这意味着没有参数)。“不过,我不确定这实际上是在幕后发生的事情。()
是一个空元组。Swift将其用作void函数的返回类型,因此
() -> ()
函数的签名,该函数不接受任何参数,也不返回任何内容(为void)
所以
声明一个不返回任何内容的函数(为void),并且
声明一个返回函数的函数,该函数不带参数但不返回任何内容。第一个
returnAFunc
的类型签名是()->()
,这意味着一个不带参数但不返回任何内容的函数。第二个函数的类型是()->()->()
,这意味着一个函数不带参数并返回类型为()->()
的函数(即一个不带参数且不返回任何内容的函数)
我认为您的基本误解是()
表示函数类型。相反,这和空虚是一样的。一旦你明白了这一点,唯一的另一个潜在的“陷阱”就是记住箭头是正确的
编辑:由于我得到了复选标记,我认为值得引起注意,这在解释如何更详细地阅读字体方面做得很好。让我们来详细介绍一下您的定义:
func returnAFunc() -> ()
关键字func
函数名returnAFunc
预期参数(无效/无)()
读作“返回”->
无效返回类型()
func returnAFunc() -> () -> ()
关键字func
函数名returnAFunc
预期参数(无效/无)()
读作“返回”->
返回类型是另一个函数规范:()->()
返回的函数不接受任何参数()
读作“返回”->
返回的函数返回void()
所以这个函数不带参数,只返回(一个不带参数,不返回任何内容的函数)。(Eesh,即使是在英语中,我也觉得有必要加上额外的括号…是的,我相信我有点困惑,因为你指出了这一点。我认为他们需要在Swift的未来迭代中更清楚地说明这一点。
func returnAFunc() -> ()
func returnAFunc() -> () -> ()