使用闭区间的 Swift For 循环

Vaz*_*zyb 2 integer for-loop swift

我有一个for循环并想访问“当前”索引。Xcode 给了我恼人的错误。

for k in [1...map.dates.count-1]
{
    map.returns.append((map.closingPrices[k]-map.closingPrices[k-1])/map.closingPrices[k-1])
}
Run Code Online (Sandbox Code Playgroud)

所以我基本上要做的是for k in [1..10],计算返回 (ba)/a,其中 b 和 a 是某个数组 ( closingPrices)中的连续元素。

编译器对我使用k访问没有问题,closingPrices但是当我使用时它会感到不安,k-1因为 k 不是整数,它是一个CountableClosedRange<Int>.

错误说

二元运算符“-”不能应用于 CountableClosedRange 和 Int 类型。

所以 - 一个简单的问题 - 我如何重写我的代码以访问 k 的整数值并从中减去 1 而不是得到编译器错误。

Vla*_*mir 12

[1...map.dates.count-1]
Run Code Online (Sandbox Code Playgroud)

返回包含单个范围的数组,因此您的循环计数器不是您期望的整数,而是一个范围对象。只需删除方括号,你应该没问题:

for k in 1...map.dates.count-1
{
    map.returns.append((map.closingPrices[k]-map.closingPrices[k-1])/map.closingPrices[k-1])
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你减去 `-1`,那么你可以直接使用 `1 ..&lt; map.dates.count`。或者类似`map.dates.indices.dropFirst()`。 (6认同)