Is there a reason why one cannot have a default value for a closure argument:
func bar(_ closure: @escaping (_ a: @escaping (_ b: Int, _ c: Int = 7) -> Void) -> Void) { // Error: Default argument not permitted in a tuple type
//...
}
Moreover, it seems sort of weird to me that for nested closures, I can't use any argument labels like the following:
func foo(_ closure: @escaping ((a: String) -> Void) -> Void) { } // Error: Function types cannot have argument labels; use '_' before 'a'
foo { f in
f(a: "Hello, World!") // Error: Extraneous argument label 'a:' in call
}
The lack of these sorts of things makes it harder to use closures on the same level that I use functions.
At first I was thinking these don't exist because maybe these types of things would conflict with the type signature of the closure itself, but it doesn't for actual functions, so I can't see why it would for closures.
func baz(a: Int = 5) { }
print(type(of: baz))
// Prints "(Int) -> ()"
Would something like default arguments and/or argument labels for closure parameters be possible to add in Swift? Or is there some fundamental underlying reason why they are not available?