将斯威夫特翻译成英文

时间:2015-07-06 17:25:54

标签: swift

我正在尝试自学编写Swift中的代码,但是我很难将我正在阅读的东西翻译成类似于英语的东西。这是一个例子:

func createAdder(numberToAdd: Int) -> (Int) -> Int
{
    func adder(number: Int) -> Int
    {
        return numberToAdd + number
    }
    return adder
}

var addTwo = createAdder(2)
addTwo(4)

如何阅读第一行代码并解释如何执行此函数?

3 个答案:

答案 0 :(得分:3)

createAdder是一个返回函数的函数。括号的位置有点令人反感 - 这样更有意义:

func createAdder(numberToAdd: Int) -> (Int -> Int)

因此它返回类型为Int -> Int的函数。那是什么意思?看看这个功能:

func addTwo(n: Int) -> Int {
  return n + 2
}

该函数采用整数 - n - 并返回另一个整数。所以函数的类型是:

Int -> Int

在这种情况下,这个函数只会增加两个给它。但是说你想要概括(在这个人为的例子中没有多大意义,但这种事情在其他场景中非常强大)。假设您想拥有一堆函数,每个函数都会为给定的数字添加一个数字。要做那个,你需要写一些类似你在你的例子中写的东西:

func createAdder(numberToAdd: Int) -> (Int) -> Int
{
  func adder(number: Int) -> Int
  {
    return numberToAdd + number
  }
  return adder
}

createAdder函数接受一个数字,然后定义一个新函数 - adder - 它返回。

可能令人困惑的最后一点是行

var addTwo = createAdder(2)

通常,您使用单词func定义函数。但是,这只是语法。函数是变量,就像Swift中的其他类型一样,它们可以这样处理。这就是为什么你能够返回一个函数,这就是为什么你能够使用var来分配它。

那它是做什么用的?好吧,如果你打电话给createAdder(2),你得到的相当于

func addTwo(n: Int) -> Int {
  return n + 2
}

如果你做了类似的事情:

var addThree = createAdder(3)

这相当于:

func addThree(n: Int) -> Int {
  return n + 3
}

在这两种情况下,你都会像普通函数一样使用它们:

addThree(1) // returns 4

所以我说这个例子有点做作 - 而且是 - 所以这种事情在哪里有用?通常,采用或返回函数的函数称为“高阶”函数。它们大量有用,如果你沿着函数式编程路线走下去,它们可以很快变得非常强大和有点哲学。保持它的基础,大多数人在Swift中遇到它的第一个地方是函数.map()map()是一个高阶函数 - 它以一个函数作为参数。但是,它还需要其他东西 - 在这个例子中,它将是一个数组。它的作用是将它给予的函数应用于数组的每个元素。所以,让我们使用createAdder()为我们提供一个函数,为函数添加1:

let addOne = createAdder(1)

是的,那么让我们得到一系列其他数字:

let nums = [1, 2, 3, 4]

然后,让我们将其与map

放在一起
let mapped = nums.map(addOne) // [2, 3, 4, 5]

如您所见,这是处理和管理数组的一种非常强大的方法。有很多这样的函数 - filter()flatMap()reduce() - 它们都依赖于这个概念。

答案 1 :(得分:1)

它描述:声明一个名为“createAdder”的函数,它以Int作为参数,此函数返回一个函数,它本身将一个Int作为参数;而这个函数本身,从“createAdder”返回的内容,返回一个Int。

-> (Int) -> Int

表示“返回一个函数 - 获取一个Int-将返回一个Int”。

答案 2 :(得分:0)

第一行代码为:

一个函数createAdder,它将numberToAdd类型Integer作为参数,而返回一个接收Integer作为参数的函数并返回Integer。在这种情况下,返回的函数是在adder中创建的createAdder函数。