[swift-evolution] Spread Operator as Shorthand for Map

Stephen Celis stephen.celis at gmail.com
Wed Dec 16 13:32:25 CST 2015

On Wed, Dec 16, 2015 at 2:18 PM, Matthew Johnson <matthew at anandabits.com>

I believe the dot abbreviation only works for enum cases right now.

Nope :)

> I suppose those can be viewed as static members in some sense but they
> really something different than that.  If I am mistaken I would like to be
> corrected.

I'll do my best!

It works as I was trying to describe earlier. Any static member that
returns Self. Try the following in a playground/REPL:

    struct Foo {
        static var bar: Foo {
            return Foo()
        static func baz() -> Foo {
            return Foo()
    let bar: Foo = .bar
    let baz: Foo = .baz()

Here's a SwiftStub demonstrating the behavior:

Enum cases work with dot abbreviation _because_ they are static members
that return Self. Enumerations aren't special-cased for dot abbreviation.

The shadowing is *current* behavior in the language.  It is not something I
> propose.

Is this true? Can you provide a full example that works in the playground
and demonstrates this? The hypothetical you paste already has certain
ambiguous issues (e.g. `var foo` and `func foo()` cannot compile together
because of redefinition).

> This would not refer to either.  It cannot refer to Foo.bar because Foo
> has nothing to do with the array you are mapping over.

The example I give works in the playground. Try it! :)

> The syntax matching my example would be:
> [1, 2, 3].map(.bar())

This would be ambiguous with a static function, `bar()`, that return Self.

> In the enum example here you cannot refer to .Bar in an arbitrary
> context.  It must be known by context that you are referring to a case of
> Foo.  It appears to me like your understanding of the existing dot
> abbreviation for enums is not quite correct and this misunderstanding is
> probably contributing to your misunderstanding and confusion regarding my
> examples.

I don't believe that I'm misunderstanding, but I'll take working examples
to the contrary.

Please try the examples I've provided in a playground (and the SwiftStub
link, above). I hope I've clarified how dot abbreviation works! Let me know
if you have any questions.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151216/54c72f16/attachment.html>

More information about the swift-evolution mailing list