2014-10-02 3 views
1

Я изучаю Swift, и у меня возникла проблема с пониманием того, как работают функции. Скажем, я получил простую функцию:Быстрые функции

func sayHello() { 
    println("hello there") 
} 

И я могу назначить эту функцию для переменных или констант таким образом:

var hello = sayHello 

Так что теперь переменный приветом является типом функции, которая может быть записана в таким образом:

var hello:() ->() = sayHello 

И теперь я могу запустить/выполнить (это правильная формулировка?) функцию SayHello, набрав:

hello() 

который печатает мой выход "привет"

Вопрос заключается в том, Что разница между этим:

var hello1 = sayHello() 
hello1 // it prints out hello there string 

и что:

var hello2 = sayHello 
hello2() // it prints out hello there string as well 

ответ

3

В двух словах,

hello1 является результатом выполнения sayHello. Но поскольку ваша функция ничего не возвращает, ее значение будет Void.

hello2 С другой стороны, это ссылка на функцию sayHello. Он имеет тип () ->(). Вот почему вам нужно выполнить его (трейлинг «()» в вашем примере), чтобы получить результат.

Это то, что мы называем First Class Function. Одна из характеристик заключается в том, что функции могут передаваться и использоваться как переменная.

+0

Благодарим за разъяснения и связь. – pardnoj

Смежные вопросы