Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Default argument not permitted in a tuple type when defining function type

Tags:

swift

I’ve got a function like this:

func next(step: Int = 1){
    //....
}

And now I would like to define a type alias so that I can easily pass around this function.

However I am not able to find a way to declare that the first argument has a default value. I tried things like this

typealias ActionNext = (step: Int = default) -> ()

var nextFunc: ActionNext = next

but they all give me a error message like

Default argument not permitted in a tuple type

Is there any way to define a type for this kind of function?

like image 930
idmean Avatar asked Dec 27 '15 11:12

idmean


People also ask

How to set a default argument in Python function?

Python Default Arguments Function arguments can have default values in Python. We can provide a default value to an argument by using the assignment operator (=). Here is an example. def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message.

What is default argument in function explain with example?

A default argument is a value provided in a function declaration that is automatically assigned by the compiler if the calling function doesn't provide a value for the argument. In case any value is passed, the default value is overridden.


1 Answers

No, that is not possible

Explanation:

A type alias declaration introduces a named alias of an existing type into your program.

(step: Int = 1) -> () is not a proper type. A type is for example (step: Int) -> (), a default value is not allowed there.

If you write

typealias ActionNext = (Int) -> ()

var nextFunc: ActionNext = next

It works. Or even when you write (step: Int) -> ()

But I assume what you want to achieve is being able to call nextFunc() omitting the parameter and using its default value. That is not possible. To understand why, you can follow the Type Alias Declaration grammar - in the type you can not specify default values.

like image 181
luk2302 Avatar answered Oct 01 '22 01:10

luk2302