Swift 如何在中保留序列上最后一次迭代的值

Swift 如何在中保留序列上最后一次迭代的值,swift,swift2,for-in-loop,Swift,Swift2,For In Loop,如果我运行这段代码,最后一次打印的结果是0,这意味着for-in内部的索引与外部的索引不同。似乎这个力宣告了一个新的常数。 我正在寻找类似的方法来保留序列中的最后一个值 我知道我能行 var index: Int=0 for index in 1...3{ print(index) } print(index)//prints 0 您知道可以这样做的方式是如何做,因为循环创建自己的范围。在{}集合内声明的任何内容都意味着它仅在该范围内使用 你知道你能做的就是如何做,因为循环会创建自己的

如果我运行这段代码,最后一次打印的结果是0,这意味着for-in内部的索引与外部的索引不同。似乎这个力宣告了一个新的常数。
我正在寻找类似的方法来保留序列中的最后一个值

我知道我能行

var index: Int=0
for index in 1...3{
    print(index)
}
print(index)//prints 0

您知道可以这样做的方式是如何做,因为循环创建自己的范围。在{}集合内声明的任何内容都意味着它仅在该范围内使用

你知道你能做的就是如何做,因为循环会创建自己的作用域。在{}集合内声明的任何内容都意味着它仅在该范围内使用

如果要循环某个内容并想知道结束索引,只需使用循环次数即可:

var index_out: Int=0
for index in 1...3{
    print(index)
    index_out = index
}
print(index_out)
或使用数组:

let n = 3
for index in 1...n{
    print(index)
}
print(n)
let array=[Int](计数:10,重复值:2)

对于0..中的索引,如果要循环某个内容并想知道结束索引,只需使用循环次数即可:

var index_out: Int=0
for index in 1...3{
    print(index)
    index_out = index
}
print(index_out)
或使用数组:

let n = 3
for index in 1...n{
    print(index)
}
print(n)
let array=[Int](计数:10,重复值:2)

对于0..中的索引,没有办法这样做,因为它与您的方法在不同的范围内。但是你也不应该做你所做的事情,在每次迭代中分配给你的索引——这是浪费。相反,只需在完成以下操作后增加索引:

let array = [Int](count: 10, repeatedValue: 2)

for index in 0..<array.count {
    print(index)
}

print(array.count)

或者,如果出于某种原因需要中断循环,只需在中断之前从循环内部分配它。

没有办法,因为它与您的方法在不同的范围内。但是你也不应该做你所做的事情,在每次迭代中分配给你的索引——这是浪费。相反,只需在完成以下操作后增加索引:

let array = [Int](count: 10, repeatedValue: 2)

for index in 0..<array.count {
    print(index)
}

print(array.count)

或者,如果出于某种原因需要中断for cycle,只需在中断之前从循环内部分配它。

您也可以使用
for in
通过外部范围生成器实现的方式,同时:

var data = []
var lastIndex = 0
for (index, object) in enumerate(data) {
    ...
}

lastIndex += data.count
这只是另一种方法,但我个人认为你应该避免这样做

一个更好的解决方案是使用reduce(在swift1.x:global函数中,在swift2:as方法中)


您还可以使用外部作用域生成器实现in的方式
,同时:

var data = []
var lastIndex = 0
for (index, object) in enumerate(data) {
    ...
}

lastIndex += data.count
这只是另一种方法,但我个人认为你应该避免这样做

一个更好的解决方案是使用reduce(在swift1.x:global函数中,在swift2:as方法中)


也许你的例子太简单了。在循环之前,您已经知道index_out的值。你为什么要计算它?也许你的例子太简单了。在循环之前,您已经知道index_out的值。你为什么要计算它?索引不一定是Int,也不一定是按照我之前知道的顺序…当然。但这正是我的帖子所说的——您将始终使用break之前的最后一个值或整个数组的最后一个值(或其他值)。您可以使用+=作为索引,也可以使用数组。最后,您可以在中断前使用数组[someIndexBeforeBreak]。没有必要每次都分配它。或者,如果你认为有,你能举个例子吗?啊…不,我不想要这个任务,这是真的。在其他语言中,我只需访问循环外部的
索引
(它实际上在swift中使用simple
for
循环)。我们试图弄清楚,在循环中使用
for…是否也可以这样做,以避免计算/赋值等。索引不一定是Int,也不一定是按照我之前知道的顺序…当然。但这正是我的帖子所说的——您将始终使用break之前的最后一个值或整个数组的最后一个值(或其他值)。您可以使用+=作为索引,也可以使用数组。最后,您可以在中断前使用数组[someIndexBeforeBreak]。没有必要每次都分配它。或者,如果你认为有,你能举个例子吗?啊…不,我不想要这个任务,这是真的。在其他语言中,我只需访问循环外部的
索引
(它实际上在swift中使用simple
for
循环)。我们正试图弄清楚,在
循环中,
for…是否也可以做到这一点,以避免计算/分配等。