3

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

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

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

然后我将此nestedDownload闭包用作以下函数的参数,并尝试在函数中完成完成参数值,如

func nestedDownloadCheck(compliletion:nestedDownload){

        compliletion(FirstItem: "firstItem")
}

但这表示错误,“表达式解析为未使用的函数

另外,当我nestedDownloadCheck()ViewDidLoad()方法中调用时,通过字符串填充编译的主体

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


            }
            return OptionalFunction("response")
        }

这表示编译错误“无法将 'Void'(aka'()') 类型的返回表达式转换为返回类型 '(SecondString: String!) -> Void'

我不知道我是如何以这种方式准确使用嵌套闭包的。

4

1 回答 1

3

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

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

    }
    return OptionalFunction
}

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

您的代码所做的是

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

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

您最终缺少的是调用实际返回的函数,如下所示:

func nestedDownloadCheck(compliletion:nestedDownload){
    compliletion(FirstItem: "firstItem")(SencondItem: "secondItem")
}
于 2015-11-08T08:54:34.807 回答