是否将作为参数传入的闭包指定给swift中的参数名称?

是否将作为参数传入的闭包指定给swift中的参数名称?,swift,closures,Swift,Closures,这段代码来自博客 我们之所以可以调用completion(),是因为传入()->()的闭包本质上被分配给参数completion,因此调用completion执行闭包 func thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: () -> ()) { print("The quick brown fox") completion() } func thisFunctionNeedsToExecuteSecond()

这段代码来自博客

我们之所以可以调用
completion()
,是因为传入
()->()
的闭包本质上被分配给参数completion,因此调用completion执行闭包

func thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: () -> ()) {
    print("The quick brown fox")
    completion()
}

func thisFunctionNeedsToExecuteSecond() {
   print("jumped over the lazy dog")
}
如果是这样的话,re:调用下面的函数,我不太明白下面的代码如何转换为在调用
此函数需要执行秒()
之前调用并完成的第一个函数?我的意思是,
()->()
如何导致
完成()
在调用
这个函数needstoexecuteSecond()
之前执行,这很难用书面形式解释

thisNeedsToFinishBeforeWeCanDoTheNextStep { () -> () in
    thisFunctionNeedsToExecuteSecond()
}

如果使用闭包作为输入参数之一创建函数,则只要通过
inputParameterName()
调用闭包,就会立即执行闭包。输入参数名称后的括号标记函数调用,该函数调用不包含闭包的输入参数,因为在本例中它的类型是
Void->Void

在你的第二个例子中

thisNeedsToFinishBeforeWeCanDoTheNextStep { () -> () in
    thisFunctionNeedsToExecuteSecond()
}
你会看到一个尾随的闭包。如果函数的最后一个输入参数是闭包,则函数调用可以转换为后续闭包语法,在该语法中可以省略闭包的名称(在本例中为完成),并且调用闭包后将执行
{}
之间的代码

所以上面的代码相当于

thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: { () -> () in
    thisFunctionNeedsToExecuteSecond()
})

如果使用闭包作为输入参数之一创建函数,则只要通过
inputParameterName()
调用闭包,就会立即执行闭包。输入参数名称后的括号标记函数调用,该函数调用不包含闭包的输入参数,因为在本例中它的类型是
Void->Void

在你的第二个例子中

thisNeedsToFinishBeforeWeCanDoTheNextStep { () -> () in
    thisFunctionNeedsToExecuteSecond()
}
你会看到一个尾随的闭包。如果函数的最后一个输入参数是闭包,则函数调用可以转换为后续闭包语法,在该语法中可以省略闭包的名称(在本例中为完成),并且调用闭包后将执行
{}
之间的代码

所以上面的代码相当于

thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: { () -> () in
    thisFunctionNeedsToExecuteSecond()
})

无法理解您的问题,因此请重新构造您的问题,使您的问题更加准确answer@dahiya_boycompletion()的作用是什么?无法理解您的问题,因此请重新构造您的问题,使您的问题更加准确answer@dahiya_boy完成()的作用是什么?谢谢!虽然我理解这一行:thisNeedsToFinishBeforeWeCanDoTheNextStep(completion:{()->(),in…)将意味着第一个函数在第二个函数之前执行,但我真的不明白为什么会出现这种情况-为什么在thisFunctionNeedsToExecuteSecond()之前发生completion:{()->())?闭包的全部要点是,它们只有在您实际调用它们时才会执行。进入完成处理程序的所有内容,在
{…}
只有在调用闭包本身时才会执行,这发生在
This needstofinishbeforewecandothenextstep
函数的末尾。这意味着执行顺序是:This needstofinishbeforewecandothenextstep中的闭包运行之前的所有内容,然后调用闭包本身,然后调用c将调用完成处理程序中的ode,在您的示例中是
thisFunctionNeedsToExecuteSecond
。谢谢@David。这太棒了。最后一个问题-当实际调用thisNeedsToFinishBeforeWeCanDoTheNextStep函数时,这是实际的闭包{()->(),在thisFunctionNeedsToExecuteSecond()中)它之所以执行,是因为在thisNeedsToFinishBeforeWeCanDoTheNextStep末尾的函数定义中,我们称之为completion()?谢谢!而我知道这一行:thisNeedsToFinishBeforeWeCanDoTheNextStep(completion:{()->()在…中,这意味着第一个函数在第二个函数之前执行,我真的不明白为什么会这样-为什么是完成:{()->()在这个函数需要执行第二个()之前发生?闭包的全部要点是,它们只有在您实际调用它们时才会执行。进入完成处理程序的所有内容,在
{…}
只有在调用闭包本身时才会执行,这发生在
This needstofinishbeforewecandothenextstep
函数的末尾。这意味着执行顺序是:This needstofinishbeforewecandothenextstep中的闭包运行之前的所有内容,然后调用闭包本身,然后调用c将调用完成处理程序中的ode,在您的示例中是
thisFunctionNeedsToExecuteSecond
。谢谢@David。这太棒了。最后一个问题-当实际调用thisNeedsToFinishBeforeWeCanDoTheNextStep函数时,这是实际的闭包{()->(),在thisFunctionNeedsToExecuteSecond()中)它之所以执行,是因为在函数定义的末尾,我们调用completion()?