Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为什么迭代数组的for循环会抛出异常?_Arrays_Exception_Swift_For Loop - Fatal编程技术网

Arrays 为什么迭代数组的for循环会抛出异常?

Arrays 为什么迭代数组的for循环会抛出异常?,arrays,exception,swift,for-loop,Arrays,Exception,Swift,For Loop,我不断从这个看似显而易见的for循环返回一个错误 for var i = 0; i < self.restaurantNames.count; i++ { self.names += [Name(name: self.restaurantNames[i], city: self.addressCity[i])] } 检查self.addressCity数组的大小。数组的大小可能小于self.restaurantNames数组。一旦输入,变量将超过addressCity数组的限制。

我不断从这个看似显而易见的for循环返回一个错误

for var i = 0; i < self.restaurantNames.count; i++ {
    self.names += [Name(name: self.restaurantNames[i], city: self.addressCity[i])]
}
检查self.addressCity数组的大小。数组的大小可能小于self.restaurantNames数组。一旦输入,变量将超过addressCity数组的限制。如果索引范围为0到10,它将通过此异常 你有11个元素。您的循环将尝试访问超出边界的11索引。所以,如果您不访问索引0处的第一个元素,请尝试从i中减去1。否则,只需从array.count中减去1即可

无论哪一个有效,都将取决于在您访问阵列之前我是否被增加

所以对于索引为0到10的数组, 你试图访问1到11个, 或者尝试访问0到11

减去1修复了1到11的问题 这就是我怀疑正在发生的事情。 从array.count中减去1修复了0到11的问题

还有一种更简单的方法是使用for-in循环


没有时间发布,代码会在我下班后检查。addressCity的元素比self少。restaurantNames。谢谢,你能解释一下原因吗?他们在同一条线路上被呼叫?我不知道为什么。我刚刚注意到,当代码抛出越界错误时,唯一可能的情况是addressCity数组包含的元素少于restaurantNames。我看不出他们提到的那一行可能有什么关系。它们在同一个循环中使用,是的。但这是否意味着它们必须具有相同数量的元素?不,不管他们是不是在同一条线上打电话。您必须首先检查包含$0.objectForKeyCity的元素列表。打印ArrayTanks所包含的数组和项目的长度,我检查过,它们的大小都相同。循环似乎被多次调用可能是一个问题。请使用循环嵌套。。对于var i=0;ifatal error: Array index out of range