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") }