稍微更通用的@matt's solution版本 - 這將讓您比較特定RawRepresentable
其RawValue
。雖然請注意,爲了允許所有4種可能的比較組合,您必須同時實施兩種過載(兩種均爲<
& >
)。
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
雖然這樣說,我會小心使用這種重載。能夠說出諸如b < 1
之類的東西並不是那麼糟糕,但當允許你說b < c
時c
是Int
- 它開始變得稍微不清楚你實際比較的是什麼(更不用說增加額外的複雜性了重載分辨率)。
簡單地說,print(b.rawValue < 1)
既清晰又簡潔,而且是我寫它的方式。
如果操作數是RawRepresentable和Int,你不需要另一個'
matt
我一直在嘗試但未能如願。感謝您的回答! –