此代码可以正常工作:
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)
}
答案 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且小于或等于零。