2016-09-21 83 views
3

我正在使用範圍爲0..<360的雙精度。我想創建一個switch case語句,它有8個case。 0,90,180和270的情況,以及兩者之間的值的情況。似乎半開放的運營商不會滿足我在這裏要做的事情。我在想這個解決方案可能是創建一個自定義的關係運算符。讓我們把它<..<如何在Swift中創建自定義關係運算符

case 0: 
case 0<..<90: 
case 90: 
case 90<..<180: 
case 180: 
case 180<..<270: 
case 270: 
case 270<..<360: 

我看着創建返回Bool定製綴操作,但將無法工作,因爲參數只包括LHS和RHS。

我該如何做到這一點?

+0

這些案例不必相互排斥,它們按照定義的順序進行檢查並且第一個獲勝。你可以有一個'case:0',接着是'case:0 .. <90'。 –

+0

感謝@MartinR。這很好。 – MyBikeIsAwesome

+0

我很好奇,看看你是否在現實生活中獲得「專注」數字。我懷疑你會得到大部分/全部時間的射程? –

回答

1

您的交換機不必要的複雜。看看它是否適用於您:

let value: Double = 180 

switch value { 
    case 0: 
     print("exactly 0") 
    case 0..<90: 
     print("less than 90") 
    case 90: 
     print("exactly 90") 
    case 90..<180: 
     print("less than 180") 
    case 180: 
     print("exactly 180") 
    case 180..<270: 
     print("less than 270") 
    case 270: 
     print("exactly 270") 
    default: 
     print("less than 360") 
} 
+0

在這種情況下,如果值是180,那麼我將需要執行不同的操作,如果它是180.1。因此,半開放的關係運算符不符合我的要求。 – MyBikeIsAwesome

+0

斯威夫特的「案例」不會落空。只要找到匹配項,它就會退出'switch'語句。查看我更新的答案 –

+0

您的更新答案完美無缺。謝謝。 – MyBikeIsAwesome

相關問題