> What this proposal is asking for is an easier way to have derived values from 
> enum cases. Asking for more flexible RawValues means mass and radius are not 
> derived, they are the source of truth. It goes against the whole point of 
> RawRepresentable. You are not saying ‘Mercury is identified by the case 
> .mercury’, you are saying ‘Mercury is identified by a mass of 3.303e+23’. 
> It’s backwards.

I see what Janis meant in the first email. It's not that the planet would be 
identified by the mass or radius. It could very much be 

case Mercury = 1 where (mass: 3, radius: 2),

- Mercury's rawValue would be 1.

The issue here is that sometimes you want additional information with the enum. 
There are many cases where you extend the enum with a variable:

enum Error {
        case NoError
        case FileNotFound
        ...

        var isFatal: Bool {
                /// swtich over all values of self goes here.
        }

        var isNetworkError: Bool {
                /// swtich over all values of self goes here.
        }

        var isIOError: Bool {
                /// swtich over all values of self goes here.
        }
}

What the propsal suggests is to simplify this to the following:

enum Error {
        var isFatal: Bool

        case NoError where (isFatal: false, isNetworkError: false, isIOError: 
false)
        case FileNotFound  where (isFatal: true, isNetworkError: false, 
isIOError: true)
        ...

}

So that you assign the additional information to the enum value itself.

Charlie

> 
> 
>> On 26 May 2016, at 1:47 PM, David Sweeris via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> 
>>> On May 25, 2016, at 10:27 PM, Jacob Bandes-Storch <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> On Wed, May 25, 2016 at 8:15 PM, David Sweeris via swift-evolution 
>>> <[email protected] <mailto:[email protected]>> wrote:
>>> On May 25, 2016, at 7:37 AM, Leonardo Pessoa via swift-evolution 
>>> <[email protected] <mailto:[email protected]>> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> Couldn't this be solved by using tuples? If not because the syntax is not 
>>>> allowed I think this would be more coherent to do it using current syntax.
>>>> 
>>>> enum Planet : (mass: Float, radius: Float) {
>>>>     case mercury = (mass: 3.303e+23, radius: 2.4397e6)
>>>>     case venus = (mass: 4.869e+24, radius: 6.0518e6)
>>>>     case earth = (mass: 5.976e+24, radius: 6.37814e6)
>>>>     case mars = (mass: 6.421e+23, radius: 3.3972e6)
>>>>     case jupiter = (mass: 1.9e+27, radius: 7.1492e7)
>>>>     case saturn = (mass: 5.688e+26, radius: 6.0268e7)
>>>>     case uranus = (mass: 8.686e+25, radius: 2.5559e7)
>>>>     case neptune = (mass: 1.024e+26, radius: 2.4746e7)
>>>> }
>>> 
>>> 
>>> This would be my preferred solution… AFAIK, the only reason we can’t do it 
>>> now is that Swift currently requires RawValue be an integer, floating-point 
>>> value, or string. I don’t know why the language has this restriction, so I 
>>> can’t comment on how hard it would be to change.
>>> 
>>> - Dave Sweeris
>>> 
>>> Except you'd have to write Planet.mercury.rawValue.mass, rather than 
>>> Planet.mercury.mass.
>>> 
>>> This could be one or two proposals: allow enums with tuple RawValues, and 
>>> allow `TupleName.caseName.propertyName` to access a tuple element without 
>>> going through .rawValue.
>> 
>> Good point… Has there been a thread on allowing raw-valued enums to be 
>> treated as constants of type `RawValue` yet? Either way, removing the 
>> restriction on what types can be a RawValue is still my preferred solution.
>> 
>> - Dave Sweeris
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to