Это константа, потому что вы не можете изменить ее внутри l oop. Компилятор преобразует for l oop во что-то, что означает:
var iterator = (1...5).makeIterator()
while true {
if let index = iterator.next() {
// the loop body goes here
} else {
break
}
}
index
является константой, но новый index
объявляется на каждой итерации.