> On Dec 13, 2016, at 20:43, David Sweeris via swift-evolution > <swift-evolution@swift.org> wrote: > >> >> On Dec 13, 2016, at 9:51 AM, Chris Lattner <clatt...@apple.com >> <mailto:clatt...@apple.com>> wrote: >> >> On Dec 12, 2016, at 6:58 PM, David Sweeris via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >>>> On Dec 12, 2016, at 16:15, John Holdsworth via swift-evolution >>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >>>> >>>> I’d like to raise again the idea of optionality when referencing a key or >>>> calling a function could be possible using a ? i.e instead of >>>> >>>> let a = key != nil ? dict[key] : nil >>>> >>>> you could just write: >>>> >>>> let a = dict[key?] >>>> >>>> or even >>>> >>>> let a = func( arg: argumentThatMayBeNull? ) // not called if argument is >>>> nil >>> >>> The first part is pretty easy to add in an extension: >>> >>> extension Dictionary { >>> subscript(_ key:Key?) -> Value? { >>> return key != nil ? self[key!] : nil >>> } >>> } >>> >>> At least I think that works... I'm on my phone so I can't test it. >> >> You can do something like this, but I’d recommend labeling the subscript. >> The problem comes up when you have a dictionary that has an optional key: >> When you use “myDict[nil]”, you may get one or the other, but you probably >> mean one specifically. > I don’t think that’s an issue in the stdlib, because `Optional` doesn’t > conform to `Hashable` and, AFAIK, no other stdlib types conform to > `ExpressibleByNilLiteral`. Custom types could conform to both, though, and > according to a playground, that does indeed lead to some confusing code: > struct Foo : ExpressibleByNilLiteral, Hashable {...} > extension Dictionary { subscript(_ key:Key?) -> Value? { return key != nil ? > self[key!] : nil } } > var bar = [Foo:Int]() > bar[nil] //calls `Foo.init(nilLiteral:())`, and tries to look up the new > `Foo` in `bar` using the stdlib's subscript > bar[nil as Foo?] //passes `Optional<Foo>.none, which uses the extension's > subscript
I wouldn't be surprised if there's a proposal to make Optional conditionally conform to Hashable if/when we get conditional conformances. Jordan
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution