对Swift嵌套函数的工作原理感到困惑

时间:2015-04-06 04:49:45

标签: function oop swift

例如,请使用以下代码:

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"的变量,因为它返回了现在存储在变量中的函数?你能不能把这里到底发生的事情分解成几步?非常感谢你!

2 个答案:

答案 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 
}
}