Swift: список захвата
var array = [() -> ()]()
var count = 0
var index = 0
while index < 5 {
array.append {
print("count: \(count)")
print("index: \(index)")
}
count += 1
index += 1
}
array[0]()
array[4]()
Вывод:
количество: 5
индекс: 5
количество: 5
индекс: 5
Тот же случай, но с некоторыми изменениями:
var array = [() -> ()]()
var count = 0
for index in 0..<5 {
array.append {
print("count: \(count)")
print("index: \(index)")
}
count += 1
}
array[0]()
array[4]()
Вывод:
количество: 5
индекс: 0
количество: 5
индекс: 4
Count
значение будет одинаковым в обоих случаях, поскольку мы не фиксируем его явно, т.е. 5
- В первом случае используется глобальная переменная, и результатом является последнее увеличенное значение, т.е. 5 и 5.
- Во втором случае для цикла
index
используется и значение равно 0 и 4 соответственно.
В чем точная разница?