Posso ligar diferentes valores associados em uma enumeração Swift à mesma var?

Criei um pouco de enum "Angle" para poder programar com diferentes formatos angulares intercambiáveis:

enum Angle {
    case Radians(CGFloat)
    case Degrees(CGFloat)
    case Rotations(CGFloat)
}

Acho que há algum código redundante de clichê com essa abordagem. Por exemplo, eu queria adicionar uma var computada que retornasse o float associado subjacente bruto:

var raw:CGFloat {
    switch self {
    case let .Radians(value):
        return value
    case let .Degrees(value):
        return value
    case let .Rotations(value):
        return value
    }
}

Eu tentei mudar isso para ler:

case .Radians(let value), .Degrees(let value):
    return value

Eu esperava que fosse inteligente o suficiente para perceber que isso só resolveria uma partida, então o conflito era ignorável. Mas não existe esse dispositivo. O compilador diz que não pode resolver o conflito entre os doislet value afirmações.

Então, existe um pouco de inteligência idiomática que eu ainda não descobri com o Swift enum que faria com que eu não precisasse me repetir tanto lá?

Outro exemplo semelhante foi quando implementei o* função:

func * (lhs:Angle, rhs:CGFloat) -> Angle {
    switch lhs {
    case .Radians:
        return .Radians(lhs.raw * rhs)
    case .Degrees:
        return .Degrees(lhs.raw * rhs)
    case .Rotations:
        return .Rotations(lhs.raw * rhs)
    }
}

Parece que deveria haver uma maneira mais simples de expressar isso: "Faça o mesmo tipo de enumeração com meu valor associado multiplicado pelo argumento escalar".

(Não tenho certeza se tenho um bom título sobre essa questão, fique à vontade para melhorar / sugerir melhor)

questionAnswers(2)

yourAnswerToTheQuestion