[swift-users] Calling (Void) -> () with Void

Kevin Lundberg kevin at klundberg.com
Sun Jul 9 20:43:20 CDT 2017


I think the fix-it is hinting that you need a value of type Void, not
literally Void itself. It's a bit confusing since () is both a type and
a value, while Void is only a type since it's declared as a typealias.
Typealiases aren't processed like macros are, it would seem.

I think the convention for function types is to only use Void after the
arrow (if at all) to avoid this confusion:

let foo: () -> Void = {} // or just () -> (), takes no params

let bar: (()) -> () // clear(er) that it takes one param of type ()

On 7/9/2017 8:43 PM, Saagar Jha via swift-users wrote:
> Hello,
>
> I’m having some odd results with closures that take Void as a
> parameter, and was wondering if this was expected behavior or a bug.
> Specifically, I have the following closure:
>
>     > Welcome to Apple Swift version 4.0 (swiftlang-900.0.45.6
>     clang-900.0.26).
>     > let foo: (Void) -> () = {}
>
>
> Trying to call foo without parameters fails, of course:
>
>     > foo()
>     error: missing argument for parameter #1 in call
>     foo()
>         ^
>         <#Void#>
>
>
> However, the fix-it doesn’t seem to work:
>
>     > foo(Void) // or even: foo(Void())
>     error: argument passed to call that takes no arguments
>     foo(Void)
>        ^~~~~~
>
>
> while
>
>     > foo(()) // Executes with no errors
>
>
> works. Since Void is a typealias for () this should work, shouldn’t
> it? Just wanted to confirm that I’m not going crazy here.
>
> Regards,
> Saagar Jha
>
>
>
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170709/993eba35/attachment.html>


More information about the swift-users mailing list