Swift 2.1 中的嵌套闭包

Nested Closures in Swift 2.1

我想清除 Swift 2.1

中的嵌套闭包

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

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

然后我使用这个nestedDownload闭包作为后面函数的参数,并尝试在函数中补全compliletion参数值,如

func nestedDownloadCheck(compliletion:nestedDownload){

        compliletion(FirstItem: "firstItem")
}

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

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

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


            }
            return OptionalFunction("response")
        }

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

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

您必须 return 实际 OptionalFunction,而不是使用 "response" 和 return 该值来调用它。 你必须在定义中使用String!

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

    }
    return OptionalFunction
}

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

您的代码所做的是

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

The compiler therefore correctly tells you that Void is no convertible to the expected return value of (SecondString: String!) -> Void

您最终缺少的是像这样调用实际的 returned 函数:

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