将参数传递给Swift中的嵌套函数

时间:2018-03-10 12:52:31

标签: swift4

我正在学习闭包课程,并指导这是对嵌套函数的理解。我发现以下示例令人困惑。您将嵌套函数分配给变量:

let person = personInTheHouse()

变量的调用如下:

print(person(“playing cricket”)) // prints “The person is playing cricket.”

我们将一个String(“打板球”)传递给该函数。我无法解决的问题是函数没有字符串作为参数。这就是我不理解的。

func personInTheHouse() -> ((String) -> String) {

完整代码:

func personInTheHouse() -> ((String) -> String) {

    func doProcess(process: String) -> (String) { // nested function
         return “The person is \(process).”
    }

    return doProcess // or return doProcess(process:)
}

let person = personInTheHouse()
print(person(“playing cricket”)) // prints “The person is playing cricket.”

2 个答案:

答案 0 :(得分:0)

你误以为:

  

将嵌套函数分配给变量:

let person = personInTheHouse()

personInTheHouse是一个嵌套函数,但personInTheHouse()是将()应用于personInTheHouse的结果,其返回类型为(String) -> String

因此,person的类型是(String) -> String,一个普通(非嵌套)函数。 参数String,您可以将字符串“playing cricket”传递给person

personInTheHouse内,没有像doProcess(或doProcess(process:)这样的参数的引用函数名称将函数本身表示为闭包。但是添加像personInTheHouse()这样的实际参数表示函数调用的结果。

答案 1 :(得分:0)

personInTheHouse是不带参数的函数,返回另一个函数。当你写:

let person = personInTheHouse()

person也是一个功能。它有什么功能?如果您阅读personInTheHouse的定义,则会看到它返回doProcess,这是一个带String并返回String的函数。所以person == doProcess - 需要String并返回String

这就是为什么你可以写

print(person("playing cricket"))