不能形成 Range with end < start

Can't form Range with end < start

当我尝试创建一个 for in 循环时,它给我一个错误 "cant form Range with end < start"。 i 的值为 4362626962,请问如何解决?

    for i in 1...slashList.count{
        let index = slashList[i]

        if !quotaList.contains(index+1)
        {
        slashList.removeAtIndex(index)
        }
    }

提前致谢!

尝试一下,它应该是 0.. 而不是 1...

for i in 0..slashList.count{
    let index = slashList[i]

    if !quotaList.contains(index)
    {
    slashList.removeAtIndex(index)
    }
}

为什么你从索引 1 而不是 0 开始循环?如果你真的需要这个,你必须检查是否 slashList 空数组:

if !slashList.isEmpty {
    // your code here
}

另外,从您编号的数组中删除项目也是不好的做法。假设你想从0开始循环,那么有一个快速的方法可以得到你想要的:

slashList = slashList.enumerate().flatMap{quotaList.contains([=11=].index + 1) ? [=11=].element : nil}

您的 for 有两个问题:

  1. 如果 slashList.count 为 0(因为 slashList 为空),它会尝试从 1 计数到 0 加 1(这会导致无限循环),这就是编译器为您提供的原因错误 start > end.
  2. 如果slashList.count大于0(slashList不为空),它会使用越界的索引,因为你从1数到slashList.count,而索引从 0 到 slashList.count - 1

检查所有索引应该是:

for i in 0 ..< slashList.count { 
   // your code 
}

忽略第一个元素(索引 0):

for i in 1 ..< slashList.count {
   // your code 
}

对于你的特殊情况,我觉得做这样的事情会更好:

for element in slashList {    
    if !quotaList.contains(element+1)
    {
        slashList.removeObject(element)
    }
}

您可以使用 this answer 中的 removeObject。如果出于某种原因,您还需要索引,请执行:

for (index, element) in slashList.enumerate() {
   // your code
}