Roland Adi Nugraha
Roland Adi Nugraha

Reputation: 31

Parentheses in Function and Closure

I am bit confused on declaring parameter and return type in Swift.

does these parameter and return type have the same meaning? What is the use of those parentheses ()?

func myFunction() -> (()-> Int)

func myFunction() -> (Void-> Int)

func myFunction() -> Void-> Int

Upvotes: 1

Views: 1132

Answers (1)

Daniel T.
Daniel T.

Reputation: 33967

First... () and Void are the same thing you have two different ways of writing the same thing.

Second... The -> is right associative. So using parens as you have in your examples are meaningless, much like they are with an expression such as a + (b * c). That expression is identical to a + b * c.

Basically, the three examples in your question all define a function that takes no parameters and returns a closure that takes no parameters and returns an Int.

Some more examples to help:

func myFuncA() -> () -> Int -> String {
    return { () -> Int -> String in return { (i: Int) -> String in String(i) } }
}

func myFuncB() -> () -> (Int -> String) {
    return { () -> Int -> String in return { (i: Int) -> String in String(i) } }
}

func myFuncC() -> (() -> Int) -> String {
    return { (f: () -> Int) in String(f()) }
}

In the above, myFuncA is identical to myFuncB, and they are both different than myFuncC.

myFuncA (and B) takes no parameters, and returns a closure. The closure it returns takes no parameters and returns another closure. This second closure takes an Int and returns a String.

myFuncC takes no parameters and returns a closure. The closure it returns takes a closure as a parameter and returns a String. The second closure takes no parameters and returns an Int.

Hopefully, writing it in Prose hasn't made it even more confusing.

Upvotes: 3

Related Questions