“… what you're describing isn't really an enum"

I’ve gotten this explanation before in reference to errors. I am confused as to 
what constitutes an enum and what doesn’t. 

-Kenny


> On Sep 18, 2017, at 10:31 AM, Jordan Rose <jordan_r...@apple.com> wrote:
> 
> As mentioned, the right way to do this is with a struct:
> 
> public struct ConnectionDictionaryKey: RawRepresentable, Hashable {
>   public var rawValue: String
>   public init(rawValue: String) { … }
>   public init(_ rawValue: String) { … }
> }
> extension ConnectionDictionaryKey {
>   static let hostName = ConnectionDictionaryKey("hostname")
>   static let databaseName = ConnectionDictionaryKey("database")
>   // …
> }
> 
> It is definitely more verbose than an enum, and it may be worth a separate 
> proposal to deal with that! But it is not part of this proposal, and what 
> you're describing isn't really an enum.
> 
> Jordan
> 
> 
>> On Sep 16, 2017, at 15:51, Kenny Leung via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> Oops, forgot something:
>> 
>> "Can there be a kind of open enum where you can add new cases in extensions?”
>> 
>> I have a use case for this. I’m trying to write a database ORM with abstract 
>> API and concrete instances for different database. So I have defined:
>> 
>> open class Database {
>>    init(connectionDictionary: [ConnectionDictionaryKey:String]) {
>>         self.connectionDictionary = connectionDictionary;
>>     }
>> }
>> 
>> Where I have ConnectionDictionaryKey defined as an enum, with values like 
>> .hostName, .databaseName, .userName, .password, .databaseName, etc…
>> 
>> But concrete databases may have other options that need to be added to the 
>> connection dictionary. It would be nice if they could just extend 
>> ConnectionDictionaryKey with new cases.
>> 
>> -Kenny
>> 
>> 
>>> On Sep 16, 2017, at 3:35 PM, Kenny Leung via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> 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 <mailto: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 
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>> _______________________________________________
>> 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

Reply via email to