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

  1. В первом случае используется глобальная переменная, и результатом является последнее увеличенное значение, т.е. 5 и 5.
  2. Во втором случае для цикла indexиспользуется и значение равно 0 и 4 соответственно.

В чем точная разница?

0 ответов

Другие вопросы по тегам