[swift-evolution] Tuples as RawRepresentable

Karl Wagner razielim at gmail.com
Fri Oct 14 12:11:23 CDT 2016


Example:


enum something {
    case onething
    case anotherthing
}
extension something : RawRepresentable {
    typealias RawValue = (Int, Int)
    
    init?(rawValue: something.RawValue) {
        switch rawValue {
        case (1, 1):
            self = .onething 
        case (2, _):
            self = .anotherthing
        default:
            return  nil 
        }
    }
    
    var rawValue: (Int, Int) {
        switch self {
        case .onething: return (1, 1)
        case .anotherthing: return (2, 0)
        }
    }
}

let whatisit = something(rawValue: (1, 1))
something.onething.rawValue

Karl

Sent from my iPad

> On 14 Oct 2016, at 19:04, Karl Wagner <razielim at gmail.com> wrote:
> 
> You can already do this; you just need to implement RawRep manually.
> 
> What I think you mean to propose is that the compiler shorthand we have (which synthesises the conformance if you use the equal signs next to the cases) be extended to support tuples of the types it currently supports. That's a relatively simple, non-source-breaking additive change. It likely doesn't fit in the scope of swift 4 phase 1, though (sorry, I've been guilty of chatting about non-abi stuff too as I encounter things which irritate me; trying to be more disciplined)
> 
> Karl
> 
> Sent from my iPad
> 
>> On 14 Oct 2016, at 12:55, Haravikk via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> 
>>> On 14 Oct 2016, at 09:49, David Sweeris <davesweeris at mac.com> wrote:
>>> 
>>> I'm very much in favor of the functionality, but I don't think the implementation should rely on compiler magic.
>>> 
>>> - Dave Sweeris 
>> 
>> Well it's not too much in the way of magic really, more just that we need Swift to see tuples as conforming to RawRepresentable and ExpressableAsTuple, although they currently aren't types in the normal sense. So the protocols being used will be the same as you might use yourself, they'll just be applied automatically for tuples.
>> 
>> It'd be neat if it could be done properly, but that could involve even more work, but doing this automatically for now should be fairly simple (though I say that as a person who wouldn't be the one doing it ;)
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161014/ac768cb2/attachment.html>


More information about the swift-evolution mailing list