嵌套函数,函数为返回,参数为

问题描述 投票:1回答:2

关于下面的代码,我想知道,嵌套函数如stepForward、stepBackward,在实际通过'moveNearerToZero(currentValue)调用时,如何将currentValue作为参数。

根据函数选择StepFunction的定义,返回类型为(Int)->Int。那么,是不是因为Int周围的括号,嵌套函数才可以取currentValue作为参数呢?

我不明白为什么currentValue的-4值会被两个嵌套函数捕获。

func chooseStepFunction(backward: Bool) -> (Int) -> Int {
    func stepForward(input: Int) -> Int { return input + 1 }
    func stepBackward(input: Int) -> Int { return input - 1 }
    return backward ? stepBackward : stepForward
}
var currentValue = -4
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)

while currentValue != 0 {
    print("\(currentValue)... ")
    currentValue = moveNearerToZero(currentValue)
}
print("zero!")
swift function return-type
2个回答
2
投票

在Swift中,函数是一等公民。这意味着函数可以像变量一样被传递或存储,就像其他任何Swift类型一样。

任何跟在第一个 -> 是该方法返回的类型。在这种情况下 chooseStepFunction 返回另一个方法,它接受一个参数(Int)并返回一个值(Int)。第一个Int周围的括号,意味着它是一个输入参数。

考虑到这一点。moveNearerToZero 是接受一个Int并返回另一个Int的函数。要调用该方法,你只需执行 moveNearerToZero(1) 等等。

我强烈建议你阅读苹果公司关于函数的部分,以更好地了解函数的使用或传递方式。https:/docs.swift.orggswift-bookLanguageGuideFunctions.html。


0
投票

chooseStepFunction(backward: currentValue > 0) 返回 "stepForward "函数。在 "stepForward "函数中,值是以1为递增的,所以,首先打印-4,然后打印-3(-4+1),以此类推,直到currentValue达到0,while循环结束。

© www.soinside.com 2019 - 2024. All rights reserved.