无法形成范围与结束<开始

时间:2016-08-02 08:34:06

标签: ios swift loops for-loop swift2

当我尝试创建一个for in循环时,它会给出一个错误,指出" cant形式Range with end<开始&#34 ;.我的价值来自4362626962.我该如何解决?

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

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

提前谢谢!

3 个答案:

答案 0 :(得分:1)

你的问题有两个:

  1. 如果slashList.count为0(因为slashList为空),它会尝试从1加0到1加1(导致无限循环),这就是编译器给你错误的原因start > end
  2. 如果slashList.count大于0(slashList不为空),它将使用超出范围的索引,因为您从1到slashList.count计数,而索引从0到slashList.count - 1
  3. 检查它应该是的所有索引:

    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
    }
    

答案 1 :(得分:0)

试试,它应该是0 ..而不是1 ......

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

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

答案 2 :(得分:0)

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

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

同样从您编号的数组中删除项目也是不好的做法。假设你想从0循环,那么有很多方法可以得到你想要的东西:

slashList = slashList.enumerate().flatMap{quotaList.contains($0.index + 1) ? $0.element : nil}
相关问题