[swift-users] How to reference a generic function when a concrete version also exists?

David Sweeris davesweeris at mac.com
Tue May 2 18:53:01 CDT 2017


> On May 2, 2017, at 4:39 PM, Nevin Brackett-Rozinsky via swift-users <swift-users at swift.org> wrote:
> 
> If I write a generic function like this:
> 
> func f<T>(_ x: T) { print("Generic: \(x)") }
> 
> I can pass it to another function like this:
> 
> func g(_ fn: (Int) -> Void) { fn(0) }
> g(f)    // Prints “Generic: 0”
> 
> However if I *also* write a non-generic function like this:
> 
> func f(_ x: Int) { print("Int: \(x)") }
> 
> Then when I make the same call as before:
> 
> g(f)    // Prints “Int: 0”
> 
> It passes in the new, non-generic version.
> 
> Is there something I can do, with both versions of f defined, to pass the generic f into g?

Not that I know of. Once the code path gets to g(), the compiler knows that the function is specifically an (Int)->Void, as opposed to the generic (T)->Void, and it’ll always go for the most specific overload. AFAIK, anyway.

- Dave Sweeris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170502/59d61b64/attachment.html>


More information about the swift-users mailing list