我对逃逸和非逃逸闭包之间的区别的简要理解:
(我说得对吗?)
阅读从Swift 2的@noescape迁移到Swift 3的@escaping (在SE-0103中)的更改日志和理由,您似乎可以异步地分派不可转义的闭包。
这是真的吗?有可能吗?
可以异步地分派一个非转义闭包函数吗?如果是,怎么做?
加分-我真的很想了解为什么逃逸和非逃逸的闭包都存在:
@async而不是@escaping呢?发布于 2017-01-19 01:04:05
我无法想象异步分派的函数是如何不可转义的。该提案中是否有一项具体声明表明了这一点?
关于你的补充问题:
这不应该是可能的,因此不会有它的用例:)
该建议说,函数编程将受益于使用较少的样板(即必须将所有参数标记为@noescape)。由于函数式编程通常需要许多函数作为参数,而这些参数主要是不可逃避的,因此这种新的默认功能允许函数式算法具有更干净、不那么杂乱的签名,并且减少了到处键入@noescape样板的次数。
不,承诺是异步的,将在Swift中使用转义闭包而不是非转义闭包来实现。
因为它们不是完全相同的概念。转义闭包可以同步执行,但是保存起来,以便稍后执行。@async描述了执行的性质,但是@escaping只意味着闭包将在传递给返回的函数之后执行。当转义闭包确实执行时,它可能同步地或异步地执行。
https://stackoverflow.com/questions/41731762
复制相似问题