Swift 2.1中的嵌套闭包

我想清除Swift 2.1中的嵌套闭包

在这里我声明一个嵌套的闭包,

typealias nestedDownload = (FirstItem: String!)-> (SencondItem: String!)->Void 

然后我使用这个nestedDownload闭包作为以下函数的参数,并尝试完成函数中的compliletion参数值,如

 func nestedDownloadCheck(compliletion:nestedDownload){ compliletion(FirstItem: "firstItem") } 

但是,这说错误,“ expression式parsing为一个未使用的函数

另外,当我通过tring调用从ViewDidLoad()方法的nestedDownloadCheck ViewDidLoad()来填充编译的主体

 self.nestedDownloadCheck { (FirstString) -> (SecondString: String!) -> Void in func OptionalFunction(var string:String)->Void{ } return OptionalFunction("response") } 

这表示编译错误“ 无法转换返回expression式的types'Void'(aka'()')返回types'(SecondString:String!) – > Void'

我无法find如何正确使用嵌套闭包这种方式。

您必须返回实际的OptionalFunction ,而不是用"response"调用它并返回该值。 你必须使用String! 在定义中:

 nestedDownloadCheck { (FirstString) -> (SecondString: String!) -> Void in func OptionalFunction(inputString:String!) -> Void { } return OptionalFunction } 

请注意,函数应该以小写字母: optionalFunction开头。

你的代码是做什么的

  • 定义一个名为OptionalFunction的函数
  • "response"作为参数调用该函数
  • 返回该调用返回的值( Void

因此,编译器正确地告诉你, Void不能转换为(SecondString: String!) -> Void的预期返回值(SecondString: String!) -> Void

你最终失去的是调用实际返回的function,如下所示:

 func nestedDownloadCheck(compliletion:nestedDownload){ compliletion(FirstItem: "firstItem")(SencondItem: "secondItem") }