【问题标题】:Swift range check > in switch快速范围检查 > 在开关
【发布时间】:2020-12-10 19:55:12
【问题描述】:

以下代码无法在 Swift 中编译。最好的替代表达方式是什么?

   //f1 & f2 are float vars between 0 & 1

   switch value {
            case 0...f1:
                break
            case >f1..f1+f2:
                break
            case >f1+f2..<=1:
                break
            default:
                break
            }

【问题讨论】:

  • 我正在尝试复制错误,因为您没有包含它。你能发足够的帖子吗?具体来说,value 可能是局部变量的错误名称。也许,如果可能的话,让我知道 exact 构建错误?
  • 你想用switch语句表达什么? &gt;f1..f1+f2&gt;f1+f2..&lt;=1 应该是什么意思?
  • 我希望第二个案例严格匹配区间 (f1, f1+f2] 中的案例,不包括 f1。

标签: ios swift switch-statement swift5 nsrange


【解决方案1】:

在 Swift 中创建一个低端开放的范围是不可能的。

这将实现您的预​​期:

switch value {
case 0...f1:
    print("one")
case f1...(f1 + f2):
    print("two")
case (f1 + f2)...1:
    print("three")
default:
    print("four")
}

由于switch 与它找到的第一个case 匹配,因此您不必担心在低端不包含在内。 f1 将与 "one" 大小写匹配,因此 "two" 大小写也包含它并不重要。

如果你想让第一种情况排除0,你可以这样写:

case let x where 0...f1 ~= x && x != 0:

case let x where x > 0 && x <= f1:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多