ste*_*hen 1 loops objective-c ios
我有一个属性,我称之为索引.我有一个可变数组,我将其称为数组.我很震惊地发现这段代码抛出索引超出范围的异常?
if(index >= [array count]) return;
for(self.item = [array objectAtIndex:index]; index < [array count]; self.item = [array objectAtIndex:index]) {
index++;
//do stuffs
}
Run Code Online (Sandbox Code Playgroud)
但是,此变体有效:
if(index >= [array count]) return;
while(index < [array count];) {
self.item = [array objectAtIndex:index];
index++;
//do stuffs
}
Run Code Online (Sandbox Code Playgroud)
我希望循环操作如下:
for(initialization instructions; condition; next iteration instruction) {...}
Run Code Online (Sandbox Code Playgroud)
我期待以下顺序:
这告诉我for循环不一定在执行下一个迭代代码之前检查条件(如在C/C++中).所以,我很好奇是否有关于for循环操作顺序的多种思想流派.如果没有,这告诉我有更复杂的问题需要解决.
谢谢.
你是否index在第一种情况下在for循环内递增?
for(self.item = [array objectAtIndex:index]; index < [array count]; self.item = [array objectAtIndex:index]) {
//do stuffs
index++;
}
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,那么你的语法会在你设置的for循环的第三部分搞砸了,self.item = [array objectAtIndex:index]而这正是抛出异常的地方,因为这部分在比较发生之前被执行index < [array count]并且让你退出循环.
你为什么不直接定义你的for循环?
for(self.item = [array objectAtIndex:index]; index < [array count]; index++) {
//do stuffs
}
Run Code Online (Sandbox Code Playgroud)
第一次通过你将首先检查CONDITION,但随后增量器在循环的每次迭代结束时运行.那时它变为INCREMENTER - > CONDITION - > loop_body.
它相当于以下内容:
initialize;
while(condition) {
// do stuffs
index++;
LOOP_INCREMENTER; // this is your assignment statement, self.item = [array objectAtIndex:index];
}
Run Code Online (Sandbox Code Playgroud)