我读过很多关于堆叠溢出的资料,但我就是想不出这一条:
几个小时以来,我一直是来自在线源代码的这一行代码,我只是不知道传递给函数的闭包为什么要转义,下面是代码:
func composeFunction(functionA: @escaping (Int) -> String, functionB: @escaping (String) -> String) -> ((Int) -> String) {
return {
number in
functionB(functionA(number))
}
}从苹果的文档中,当: 1)运行在后台线程上的异步操作,2)闭包与其作用域以外的属性交互(使用self)时,闭包正在转义。
但我不认为这些发生,许多帮助将得到感谢!
谢谢!
发布于 2017-08-17 16:29:00
{
number in
functionB(functionA(number))
}是个了结。返回它会导致functionB和functionA都转义,因为在何时调用或释放这个闭包变得未知。
这与return functionB(functionA(number))不同,后者导致对这两个函数的立即调用,并使它们永远不会脱离composeFunction上下文。
发布于 2017-08-17 16:44:52
func composeFunction返回一个((Int) -> (String)),这正是一个闭包。当然,现在这意味着functionA和functionB将转义,因为我们不知道何时何地会调用这个闭包。此外,这是因为它需要知道是否应该保持对传入/正在操作的对象的引用。例如,如果所有闭包参数都有(() -> Void),并且还返回了(() -> Void),那么它就不需要转义了。
https://stackoverflow.com/questions/45740475
复制相似问题