2016-09-21 49 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

相关问题