2014-10-02 29 views
1

我正在學習Swift,並且在理解函數如何工作時遇到了問題。 比方說,我有一個簡單的功能: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 2014-10-03 08:24:18