我无法理解方法行为

时间:2018-09-16 15:49:57

标签: swift

func mymethod(getno:Int)->(myval :Int,defaults :Int){
    return (getno,8)
 }
 print(mymethod(getno: 2))

以上程序的输出为 我的val是2,默认是8

好的,我可以理解以上程序

但是以下方法对我来说值得怀疑

func makeIncrementer() -> ((Int) -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
increment(7)

我不明白这一行(var增量= makeIncrementer())那里发生了什么?

有人可以简短地向我解释一下吗?

2 个答案:

答案 0 :(得分:1)

makeIncrementer返回一个接受Int并返回Int的函数,因此

var increment = makeIncrementer()

使increment变量等于

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

所以increment(7) = addOne(7)

您可以阅读Swift书中的Functions一章

答案 1 :(得分:0)

您并不孤单。刚开始时,我也很难为这个问题着迷:)

您看到的是“一个函数返回另一个函数”。可以将功能想像成黑盒子,将东西塞进去,然后将东西吐出。现在想象一下将它们传递为10"Hello"之类的值。

makeIncrementer返回一个函数。哪个功能?这个:

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

看到return addOne行吗?那不是在调用函数,而是在返回它!

因此,当您将makeIncrementer的返回值分配给increment时:

var increment = makeIncrementer()

increment的值现在为addOne。调用increment与调用addOne相同。上面的语法在语法上与以下内容没有区别:

var myString = getMyString()

区别在于您使用的是函数而不是字符串。

现在您了解了increment(7)为什么是8了。

如果您想更多地消耗大脑,请尝试查找currying函数。