In general, I agree with everything in the proposal.

I’d like to propose these alternative extensions for clients:

1) As a client of an enum, I’d like to know in the future when a new value has 
been added to an enum, since I may have to do something about it. How about 
adding the “exhaustive” keyword to be used in the switch statement? Like

exhaustive switch excuse {
    case eatenByPet:
        // …
    case thoughtItWasDueNextWeek:
        // …
    default:
        // …
}

If exhaustive is used, there would be a warning if all cases aren’t covered 
*even though default exists*. This means that I as the client thought I had 
everything covered when I wrote this code.

As already mentioned, this makes the default case un-testable, which brings me 
to

2) All non-exhaustive enums should have the pseudo value “default” that can be 
used just like a regular value. This would allow you to write code like:

teacher.failedToHandInHomework(excuse: .default)

which would allow you to trip the default case in any code you may write.

-Kenny


> On Sep 13, 2017, at 12:17 PM, Jordan Rose via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Proposal updated, same URL: 
> https://github.com/jrose-apple/swift-evolution/blob/non-exhaustive-enums/proposals/nnnn-non-exhaustive-enums.md
>  
> <https://github.com/jrose-apple/swift-evolution/blob/non-exhaustive-enums/proposals/nnnn-non-exhaustive-enums.md>.
> 
> Thanks again for all the feedback so far, everyone!
> Jordan
> 
> 
>> On Sep 12, 2017, at 17:55, Jordan Rose via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> Sorry, I got distracted by other tasks! Both the discussion here and within 
>> Apple has moved towards making "non-exhaustive" the default, which, to be 
>> honest, I too think is the best design. I'll update the proposal today to 
>> reflect that, though I still want to keep both the "nonexhaustive" and 
>> "exhaustive" keywords for Swift 4 compatibility for now (or whatever we end 
>> up naming them). The compatibility design is a little less ambitious than 
>> Brent's; as currently proposed, Swift 4 mode continues to default to 
>> 'exhaustive' all the time, even in the actual Swift 5 release.
>> 
>> I still want to respond to Brent's points directly, but I think you and 
>> Vladimir have done a good job discussing them already. I'll send out the 
>> updated proposal tomorrow, after I have a little more time to think about 
>> #invalid.
>> 
>> Thanks for putting time into this!
>> Jordan
>> 
>> 
>>> On Sep 9, 2017, at 17:34, Rod Brown <rodney.bro...@icloud.com 
>>> <mailto:rodney.bro...@icloud.com>> wrote:
>>> 
>>> Jordan,
>>> 
>>> Do you have any other thoughts about the ongoing discussion here, 
>>> especially regarding Chris’ comments? As you’re the one pushing this 
>>> forward, I’d really like to know what your thoughts are regarding this?
>>> 
>>> - Rod
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to