当我尝试创建一个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)
}
}
提前谢谢!
答案 0 :(得分:1)
你的问题有两个:
slashList.count
为0(因为slashList
为空),它会尝试从1加0到1加1(导致无限循环),这就是编译器给你错误的原因start > end
。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
}
答案 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}