Nested Closures in Swift 2.1

拈花ヽ惹草 提交于 2020-01-01 14:36:13

问题


I want to clear about Nested Closures in Swift 2.1

Here I declare a nested closure,

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

Then I use this nestedDownload closure as a parameter of the following function and try to complete the compliletion parameter value in function like as

func nestedDownloadCheck(compliletion:nestedDownload){

        compliletion(FirstItem: "firstItem")
}

But this says the error, "Expression resolves to an unused function"

Also , when I call nestedDownloadCheck() from ViewDidLoad() method by tring to fill the body of the compilation

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


            }
            return OptionalFunction("response")
        }

This says the compilation error "Cannot convert return expression of type 'Void'(aka'()') to return Type '(SecondString: String!) -> Void' "

I can't find out how I exactly use the nested closure in this way .


回答1:


You have to return the actual OptionalFunction, not invoke it with "response" and return that value. And you have to use String! in the definition:

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

    }
    return OptionalFunction
}

Note that functions should start with a lower case letter: optionalFunction.

What your code does is

  • define a function called OptionalFunction
  • call that function with "response" as parameter
  • return the value returned by that invocation (Void)

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

What you are finally missing is to invoke the actual returned function like so:

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


来源:https://stackoverflow.com/questions/33591777/nested-closures-in-swift-2-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!