Вы не одиноки. Мне было трудно обернуть голову вокруг этого, когда я только начинал :))
То, что вы видите, это «функция, возвращающая другую функцию». Думайте о функциях как о чёрных ящиках, которые принимают и выплевывают вещи. Теперь представьте, что вы можете передавать их, как если бы они были значениями типа 10
или "Hello"
.
makeIncrementer
возвращает функцию. Какая функция? Это:
func addOne(number: Int) -> Int {
return 1 + number
}
Смотри строчку return addOne
? Это не вызывает функцию, но возвращает ее!
Поэтому, когда вы присваиваете значение makeIncrementer
, равное increment
:
var increment = makeIncrementer()
increment
теперь имеет значение addOne
. Вызов increment
будет таким же, как и звонок addOne
. Вышеуказанная строка синтаксически ничем не отличается от:
var myString = getMyString()
Разница в том, что вы работаете с функциями вместо строк.
Теперь вы понимаете, почему increment(7)
равно 8.
Если вы хотите больше сжигать свой мозг, попробуйте поискать функции карри.