Default values for associated types are approved for Swift 4. They just haven’t been implemented.
On Tue, Jul 25, 2017 at 16:02 Matthew Johnson via swift-evolution < [email protected]> wrote: > On Jul 25, 2017, at 3:26 PM, David Sweeris via swift-evolution < > [email protected]> wrote: > > > On Jul 25, 2017, at 12:38, Robert Bennett via swift-evolution < > [email protected]> wrote: > > Currently if you have the following enum: > > enum E<T> { > case c(T) > } > > then if T is Void, you have to write one of the following: > > let x: E<Void> = .c(Void()) > let y: E<Void> = .c(()) > > Looks awkward, no? In this case you can omit `<Void>` after `E` because it > can be inferred, but if writing a (non-generic) function taking an argument > of type `E<Void>`, then the `<Void>` cannot be omitted, and you still have > to write `.c(())` for the case name. > > I’m proposing that for enum cases with a single associated value of Void > type, or of a generic type that is equal to Void in some instance, you may > omit the parentheses altogether and merely write > > let x: E<Void> = .c > > The rationale is twofold: first, double parentheses just looks bad; > second, there is only a single value of type Void, which means the > associated value of `.c` is trivially inferable, and hence should be > omissible. > > I am not proposing that a bare `E.c` imply a type of `E<Void>` — `E.c` > should still be illegal in the absence of specification of the generic type > — only that when the type is known to be `E<Void>`, `.c` can replace > `.c(())`. > > Thoughts? > > > My first response is +1 > > My second response is to ask just how much would it break things to expand > this and allow omitting the argument anywhere its type is known to be Void? > Maybe by implicitly providing a default value of `()` wherever there's a > `Void` argument? Like make `func foo(x: Void) {...}` implicitly become `func > foo(x: Void = ()) {...}`? I have a sneaking suspicion that this > question's already been asked, but I'm not sure. > > > I think default arguments for associated values have come up before. I > would love to see that added someday. > > > - Dave Sweeris > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution > > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
