[swift-evolution] Be able to initialise empty dict with array constrcutor

Chris Lattner clattner at apple.com
Tue Jan 5 12:58:58 CST 2016


You’re completely right, but we don’t need to change the swift language to fix that.  As of 3f19714, which I just pushed, we now emit this error message (which includes a fixit hint to insert the colon):

t.swift:2:33: error: use [:] to get an empty dictionary literal
var distanceCache: [Int: Int] = []
                                ^
                                 :

instead of:

t.swift:2:33: error: contextual type '[Int : Int]' cannot be used with array literal
var distanceCache: [Int: Int] = []
                                ^~

That should address the problem, thanks for pointing this out!

-Chris

> On Jan 5, 2016, at 4:51 AM, James Campbell via swift-evolution <swift-evolution at swift.org> wrote:
> 
> The problem for me is that is so counter intuitive I didn't even know you could do that.
> 
> On Tue, Jan 5, 2016 at 12:50 PM, Jeremy Pereira <jeremy.j.pereira at googlemail.com <mailto:jeremy.j.pereira at googlemail.com>> wrote:
> I don’t understand what the problem is
> 
> > On 5 Jan 2016, at 12:39, James Campbell via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> >
> > See this code:
> > var distanceCache: [Int: Int] = Dictionary<Int, Int>()
> >
> > It is very long and tedious to write especially if what I am storing changes.
> >
> > I propose we be allowed to do the following:
> > var distanceCache: [Int: Int] = []
> 
> You can do
> 
> var distanceCache: [Int: Int] = [:]
> 
> Also
> 
> var distanceCache2 = [Int: Int]()
> 
> 
> > Perhaps this dictionary syntax is just confusing and it was a bad idea to make it the same as an array. Most languages use "{" so why did swift choose to share "[" with arrays and dictionaries.
> 
> It’s not the same, you need the colons inside. I imagine that braces were discarded on the grounds that it would confuse the compiler with respect to closures, for example
> 
> var myClosure = {} // is a variable of type () -> ()
> 
> 
> >
> > --
> >  Wizard
> > james at supmenow.com <mailto:james at supmenow.com>
> > +44 7523 279 698 <tel:%2B44%207523%20279%20698>
> >  _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> > https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> 
> 
> -- 
>  Wizard
> james at supmenow.com <mailto:james at supmenow.com>
> +44 7523 279 698
>  _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160105/40326866/attachment.html>


More information about the swift-evolution mailing list