例如,请使用以下代码:
func jediTrainer () -> ((String, Int) -> String) {
func train(name: String, times: Int) -> (String) {
return "\(name) has been trained in the Force \(times) times"
}
return train
}
let train = jediTrainer()
train("Obi Wan", 3)
我对这个功能发生了什么感到困惑。 jediTrainer不接受任何参数,并返回一个名为train的函数。当我们说" train = jediTrainer()"我们现在正在存储FUNCTION" train"进入名为" train"的变量,因为它返回了现在存储在变量中的函数?你能不能把这里到底发生的事情分解成几步?非常感谢你!
答案 0 :(得分:0)
在Swift函数中是第一类对象,这意味着函数可以被变量引用,作为参数传递并从其他函数返回。
在你的情况下,jediTrainer()返回一个函数,它本身就是一个嵌套函数。所以让train指的是jediTrainer中的train()函数。现在你可以使用train变量来调用该列车功能。
有关详细信息,请参阅功能类型和相关主题here。
答案 1 :(得分:0)
您还可以在其他函数体内定义函数。这些函数称为嵌套函数。 默认情况下,嵌套函数对外部世界是隐藏的。它的封闭函数仍然可以调用它。封闭函数也可以返回嵌套函数之一,从而允许嵌套函数在另一个范围内使用。
func aFunc (flag:Book)->(Int)->Int
{
func plus ( input:Int )->Int
{
return input + 1
}
func minus ( input:Int )->Int
{
return input - 1
}
if (flag)
{
return plus
}
else
{
return minus
}
}