Eine etwas generische Version von @matt's solution - die Ihnen einen gegebenen RawRepresentable
mit seinem RawValue
zu vergleichen erlauben würde. Beachten Sie, dass Sie beide Überladungen für beide <
& >
implementieren müssen, um alle 4 möglichen Kombinationen von Vergleichen zu ermöglichen.
func < <T : RawRepresentable>(lhs: T, rhs: T.RawValue) -> Bool where T.RawValue : Comparable {
return lhs.rawValue < rhs
} // allows b < 1
func < <T : RawRepresentable>(lhs: T.RawValue, rhs: T) -> Bool where T.RawValue : Comparable {
return lhs < rhs.rawValue
} // allows 1 < b
func > <T : RawRepresentable>(lhs: T, rhs: T.RawValue) -> Bool where T.RawValue : Comparable {
return lhs.rawValue > rhs
} // allows b > 1
func > <T : RawRepresentable>(lhs: T.RawValue, rhs: T) -> Bool where T.RawValue : Comparable {
return lhs > rhs.rawValue
} // allows 1 > b
Obwohl dass gesagt wird, würde ich die Verwendung solcher Überlastungen vorsichtig sein. Es ist nicht so schlimm, Dinge wie b < 1
sagen zu können, aber das Wasser wird trüber, wenn man sagen kann: b < c
wo c
ein Int
ist - es beginnt etwas unklar zu werden, was man tatsächlich vergleicht (ganz zu schweigen von der zusätzlichen Komplexität) um die Auflösung zu überlasten).
Einfach gesagt print(b.rawValue < 1)
ist sowohl klar als auch prägnant und ist die Art, wie ich es schreiben würde.
Müssten Sie nicht ein anderes '<' überschreiben, wo die Operanden ein RawRepresentable und ein Int sind? – matt
Ich habe versucht, aber es versäumt, dies zu tun. Danke für deine Antwort! –