【问题标题】:What does the type ((Int) -> Int) mean in Swift?Swift 中的类型 ((Int) -> Int) 是什么意思?
【发布时间】:2014-12-07 01:10:10
【问题描述】:

我在浏览 Apple 对 Swift 的介绍时遇到了这样的例子:

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

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

}
var increment = makeIncrementer()
increment(7)

你能解释一下makeIncrementer函数的返回类型的语法吗?我知道这个函数返回另一个函数,但((Int) -> Int) 在这种情况下的作用对我来说仍然不清楚。

【问题讨论】:

  • (作为一个返回类型并不直接相关,尽管它确实提出了一个有趣的例子:它也可能是一个变量的类型,例如。)

标签: types swift


【解决方案1】:

表示该函数返回一个函数,该返回函数将Int作为输入参数,同时也返回一个Int。

在函数中定义函数在 Swift 中是完全合法的。

【讨论】:

    【解决方案2】:

    (Int -> Int) 表示以Int 作为参数并返回Int 的闭包(或函数)。

    声明闭包类型的语法是:

    (parameters) -> (return_types)
    

    parameters 是闭包作为输入接收的参数列表,return_types 是闭包返回的值列表。两者都是元组,但在一个参数或一种返回类型的情况下,可以省略标识元组的括号。因此,例如一个期望一个参数并返回一个值的 clousure 可以定义为:

    parameter -> return_type
    

    在你的情况下:

    Int -> Int
    

    是一个闭包,有 1 个 Int 类型的输入参数并返回一个 Int

    返回类型用括号括起来,以明确返回类型,但您也可以将其写为:

    func makeIncrementer() -> Int -> Int {
    

    在我看来,它的可读性不如

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

    【讨论】:

      【解决方案3】:

      我对 swift 的语法并不十分熟悉,但我猜所有高阶函数的工作方式都是一样的。 makeIncrementer 是一个函数:

      • 采用无参数
      • 返回一个函数:
        • 采用Int 参数
        • 返回Int

      可视化解释(a -> b表示以a类型为参数并返回b类型的函数):

       makeIncrementer -> (Int -> Int)
                                 ^
                                 |
                                 |
                                 一个接受 Int 并返回 Int 的函数,
                                 即(在您的情况下为addOne)
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-11
        • 2015-08-28
        • 2011-06-05
        • 1970-01-01
        • 2016-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多