我简要理解转义和非转义闭包之间的区别:
(我做对了吗?)
阅读更改日志以及从Swift 2的@noescape
移至Swift 3 @escaping
(SE-0103)的理由,看来您可以异步发送非 - 关闭封闭。
这是真的吗?可能的?
您可以异步调度非转义闭包函数吗?如果是这样,怎么样?
奖励积分 - 我真的想了解为什么存在转义和非转义闭包:
@async
而不是@escaping
?答案 0 :(得分:4)
我无法想象异步调度函数如何可以非转义。提案中是否有特定声明表明?
关于您的其他问题:
- 是否存在异步调度非转义闭包代替转义闭包的实际用例?
这不应该是可能的,所以它不会是一个用例:)
- 在设计方案中,它表明函数式编程受益于非转义(读取:同步?)是默认值。这是真的?为什么?
该提案表示,功能编程将受益于较少的样板(即必须将所有参数标记为@noescape
)。由于函数式编程通常需要许多函数 - 主要是非转义的参数,这个新的默认值允许函数式算法具有更清晰,更简洁的签名,并减少在任何地方键入@noescape
样板。
- 非转义闭包与node.js中的承诺之间是否有任何相似之处?
不,promises是异步的,可以使用转义闭包而不是非转义闭包在Swift中实现。
- 如果我对所有这些都错了,为什么不把它叫做@async而不是@escaping?
因为它们的概念并不完全相同。转义闭包可以同步执行,但可以保存以便以后执行。 @async
描述了执行的本质,但@escaping
仅表示在传递的函数返回后执行闭包。当一个转义闭包执行时,它可能会同时或异步地执行此操作。