2014-10-12 138 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) 

相关问题