Swift:最小的可执行循环

时间:2018-09-19 12:28:02

标签: xcode swift3

如果lowerBound大于upperBound,您的代码将崩溃

为什么要运行(什么都不会输出,但仍然会运行,而且不能输入浮点,所以“ <1”似乎是“ 0”))...

"line-offset": [
  "interpolate",
  [ "linear" ],
  [ "zoom" ],
  12, 0,
  16, ["*", 2, 1],
]

但这不是...

for i in 1..<1 {}

2 个答案:

答案 0 :(得分:1)

前者表示“从1开始并加1,如果该值小于1,则将其包括在内”。那是一个没有值的集合,但这是很合理的话。

后者表示“从1开始并递增1,直到该值等于0,再包含它”。那确实是所有正整数的集合,但是实际上,您绝对不是那个意思,而是明确地将其定义为错误。

另一种说法是,前者是所有大于或等于1且小于1的整数。同样,这是一个空集。

后者是一组所有大于或等于1且小于或等于0的值。这也是一个空集,但几乎可以肯定不是您的意思,因此将其定义为错误。

答案 1 :(得分:1)

错误消息告诉您答案:

  

不能与upperBound 形成范围

那只是重要的 规则。

如何范围的形成与该规则无关。形成范围的运算符是peek()还是...都没关系。重要的是,当我们尝试服从运算符并实例化范围时,必须证明上限不小于下限。

好吧,在..<中,上限不小于下限。所以这是合法范围。

它也是一个“空”范围; 1..<1没有整数(既不是0,也不是1,也不是2,也不是任何其他整数)。但这仍然是一个范围。

现在,如果您考虑一下,那是一件非常有价值的事情。在您的示例中,它看起来并不有价值,因为您使用的是文字。但是,当下限和上限来自变量时,contains不会在lo..<hilo相等的极端情况下崩溃是一件非常好的事情!这种情况产生了很多,并且有充分的理由。

例如,考虑循环通过数组的元素。如果数组为空,则其hiindices(您猜对了)。您希望合法循环通过该数组。没什么发生,但这不是违法的。这就是这条规则所说的。