[swift-evolution] [Proposal] Set literal and Set type syntax

Greg Parker gparker at apple.com
Tue Jan 19 15:55:15 CST 2016


> On Jan 18, 2016, at 2:55 PM, Howard Lovatt via swift-evolution <swift-evolution at swift.org> wrote:
> 
>> On Tuesday, 19 January 2016, Jack Lawrence <jackl at apple.com <mailto:jackl at apple.com>> wrote:
>> 
>>> On Jan 18, 2016, at 2:50 PM, Liam Butler-Lawrence via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> Set("a", "b", "c”) doesn’t compile. It currently has to be  Set(arrayLiteral: "a", "b", "c”). That said, I’d be satisfied with removing the external parameter name “arrayLiteral”. Not only is it unnecessary, but it’s confusing too: variadic parameters are not the same as an Array.
>> 
>> init(arrayLiteral:) is there to satisfy ArrayLiteralConvertible. Set([“a”, “b”, “c”]) works just fine.
> 

> Sure, but you could add another overload without the label.


Only if you break existing code. Consider this expression:

    Set(["a", "b"])

Is this
1. a Set<String> with two elements "a" and "b"
2. a Set<Array<String>> with one element ["a", "b"]

Currently it means #1. You could change it to mean #2, but that breaks existing code that expects #1. You could try to overload the no-name initializer, but that will be confusing to humans in some cases.


-- 
Greg Parker     gparker at apple.com     Runtime Wrangler


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160119/748a264d/attachment.html>


More information about the swift-evolution mailing list