需要重写一些代码

时间:2015-04-06 18:59:25

标签: ios macos cocoa swift

此代码可以正常工作:

var x = 3.14
var y: Double

switch true {

case (x<=0.5):
    y = 0.5
    println(y)

case x>-0.5 && x<=0:
    y = x + 1
    println(y)

case x>0 && x<=1:
    y = x*x-1
    println(y)

case x>1:
    y = x - 1
    println(y)
default: println()
}

我怎样才能重写此代码以获得相同的结果?我在case x>..1:case x>..1:

的行中有错误
var x: 3.14
var y: Double

switch x {

case >..0.5:
    y = 0.5
    println(y)

case -0.5...0:
    y = x + 1
    println(y)
case 0<..1:
    y = x*x-1
    println(y)

case x>..1:
    y = x - 1
    println(y)

}

2 个答案:

答案 0 :(得分:2)

(我假设您的前两个案例实际应该是x <= -0.5-0.5 < x <= 1.0,否则第二种情况永远不会成真。)

可以使用switch声明:

switch x {
case -DBL_MAX ... -0.5:
// Or: case let t where t <= -0.5:
    y = 0.5
case -0.5 ... 0.0:
    y = x + 1
case 0.0 ... 1.0:
    y = x*x - 1
default:
    y = x - 1
}
println(y)

由于使用了第一个匹配的情况,因此无关紧要 起始值包含在第二和第三种情况中。

如果范围的最后一个值包含在案例中 然后你可以使用HalfOpenInterval代替:

switch x {
case HalfOpenInterval(-DBL_MAX, -0.5):
    y = 0.5
case HalfOpenInterval(-0.5, 0):
    y = x + 1
case HalfOpenInterval(0.0, 1.0):
    y = x*x - 1
default:
    y = x - 1
}
println(y)

但我可能只会使用if/else if/else

if x <= -0.5 {
    y = 0.5
} else if x <= 0.0 {
    y = x + 1
} else if (x <= 1.0) {
    y = x*x - 1
} else {
    y = x - 1
}
println(y)

或嵌套的条件表达式:

let y = x <= -0.5   ? 0.5 :
        x <= 0.0    ? x + 1 :
        x <= 1.0    ? x * x - 1 :
                    x - 1
println(y)

答案 1 :(得分:0)

第二种情况没有意义:

case x>=0.5 && x<=0:

这永远不会成真。值不能大于0.5且小于或等于零。