давайте начнем с первой точки
func chooseStepFunction(backward: Bool) -> (Int) -> Int
Посмотрев это объявление функции, вы можете сказать, что chooseStepFunction
- это функция, которая принимает один аргумент типа Bool
и возвращает функцию типа (Int)-> Int
, которая принимает один аргумент Int в качестве параметра и возвращает Int
, поэтому здесь chooseStepFunction
возвращает функцию типа (Int)->Int
на основе переданного в backward
параметра.
- В следующем операторе return мы не вызываем
stepBackward
или stepForward
, поэтому мы не используем скобки (). с самого начала вы должны понимать, что chooseStepFunction
вернет функцию, и эта функция имеет тип (Int)->Int
, и внимательно посмотрите, вы обнаружите, что stepBackward and stepForward
сигнатура (Int)->Int
, которая вернется к chooseStepFunction
return backward ? stepBackward : stepForward
3.
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
здесь chooseStepFunction
возвращают функцию типа (Int)->Int
, которая хранится в moveNearerToZero
, так что это не простая переменная, это функция, поэтому мы можем использовать скобки.
Следующее описание взято из быстрой документации, которая объясняет, как вы можете использовать функцию как тип:
Использование типов функций
Вы используете типы функций, как и любые другие типы в Swift. Например, вы можете определить константу или переменную для типа функции и назначить соответствующую функцию для этой переменной:
var mathFunction: (Int, Int) -> Int = addTwoInts
Это можно прочитать как:
«Определите переменную с именем mathFunction, которая имеет тип« функция, которая принимает два значения Int и возвращает значение Int. ’Установите эту новую переменную так, чтобы она ссылалась на функцию с именем addTwoInts».
Функция addTwoInts(_:_:)
имеет тот же тип, что и переменная mathFunction, поэтому это присваивание разрешено средством проверки типов Swift.
Теперь вы можете вызывать назначенную функцию с именем mathFunction:
print("Result: \(mathFunction(2, 3))")
Надеюсь, это поможет.