Нужно понимать порядок исполнения в замыканиях - PullRequest
0 голосов
/ 10 апреля 2019

Я экспериментировал в Playground с примером из документации Swift относительно замыканий - я добавил операторы печати внутри функции инкремента и непосредственно перед возвратом к функции makeIncrementer.

func makeIncrementer(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0
    func incrementer() -> Int {
        print("something")
        runningTotal += amount

        return runningTotal
    }
    print("running total is: \(runningTotal)")
    return incrementer
}

let incrementByTen = makeIncrementer(forIncrement: 10)
incrementByTen()
incrementByTen()
incrementByTen()
incrementByTen()
incrementByTen()
incrementByTen()

при запускекод, который я получаю:

running total is: 0
something
something
something
something
something
something

Почему не выполняется печать «Итоговая сумма:» каждый раз, когда я вызываю incrementByTen ()?- спасибо

1 Ответ

1 голос
/ 10 апреля 2019
  • Выполнение строки let incrementByTen = makeIncrementer(forIncrement: 10)

    создает функцию func incrementer() путем захвата runningTotal и amount, печатает running total is.. и возвращает

    func incrementer() -> Int {
        print("something")
        runningTotal += 10
    
        return runningTotal
    }
    

    Выполняется , а не Выполнять incrementer().
    После этого переменная incrementByTen содержит всю incrementer() функцию

  • Выполнение строки incrementByTen()

    выполняет только функцию incrementer(), печатает something, выполняет математические вычисления и возвращает увеличенное значение.

...