[swift-evolution] Closures from methods with default args

Charlie Monroe charlie at charliemonroe.net
Mon Jan 9 02:13:36 CST 2017

I came across something that I'm not sure it's a bug or by design and if it's by design, whether this should be discussed here.


class Foo {
    init(number: Int) { /* ... */ }

let closure = Foo.init(number:) // (Int) -> Foo
[1, 2, 3].map(closure) // [Foo, Foo, Foo]

This works great until the initializer gets a default argument:

class Foo {
    init(number: Int, string: String = "") { /* ... */ }

// Error: Foo has no member init(number:)
let closure = Foo.init(number:) 

I was wondering if we could get closures to methods without the default arguments. Currently, this needs to be worked around by e.g. creating a second closure that invokes the method without the default arguments:

let closure: (Int) -> Foo = { Foo(number: $0) }

But to me it seems like something that should work "out of the box".

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170109/9f420955/attachment.html>

More information about the swift-evolution mailing list