2014-10-12 82 views
6

我打算通過蘋果的介紹是斯威夫特和這樣的例子來:Swift中的類型((Int) - > Int)是什麼意思?

func makeIncrementer() -> ((Int) -> Int) { 

    func addOne(number: Int) -> Int { 
     return 1 + number 
    } 
    return addOne 

} 
var increment = makeIncrementer() 
increment(7) 

能否請你解釋一下makeIncrementer函數的返回類型的語法?我明白這個函數返回的是另一個函數,但是在這種情況下((Int) -> Int)的角色對我來說仍然不清楚。

+0

(作爲一個返回類型是不直接相關,但它確實帶來了一個有趣的例子:它也可能是一個類型的一個變量,例如) – user2864740 2014-10-12 09:19:21

回答

7

它表示函數返回一個功能和返回的函數需要一個Int作爲輸入參數並且返回一個Int爲好。

在函數中定義函數在Swift中是完全合法的。

2

(Int -> Int)表示以Int作爲參數並返回Int的閉包(或函數)。

用於聲明閉合類型的語法是:

(parameters) -> (return_types) 

parameters是封閉接收作爲輸入的參數的列表,並且return_types是值閉合返回的列表。兩者都是元組,但是在一個參數或一個返回類型的情況下,標識元組的括號可以省略。因此,例如,一個clousure期待一個參數並返回一個值可以被定義爲:

parameter -> return_type 

在你的情況:

Int -> Int 

是具有Int類型的1個輸入參數並返回一個Int

封閉

返回類型用括號括起來以表明它是返回類型,但您也可以將它寫爲:

func makeIncrementer() -> Int -> Int { 

這在我看來比

func makeIncrementer() -> (Int -> Int) { 
1

的可讀性我並不很熟悉,迅速的語法,但我想所有的高階函數的工作方式相同。makeIncrementer是一個函數,它:

  • 需要沒有參數
  • 返回一個函數:
    • 需要一個Int參數
    • 返回Int

視覺解釋(a -> b意味着一個函數,它的參數和返回類型b)型a

 makeIncrementer -> (Int -> Int) 
         ^
          | 
          | 
          a function that takes an Int and returns an Int, 
          i.e. (addOne in your case) 

相關問題