gpt4 book ai didi

ios - @noescape、@escaping 和@autoclosure 之间有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-30 22:05:30 24 4
gpt4 key购买 nike

我正在使用 Xcode 8 将代码转换为 Swift,但编译器警告在一些已在 Swift 2.3 中使用闭包语法创建的嵌套函数中添加 @escape。我还发现了一些其他关键字 @noescape@autoclosure,但我对此有一些疑问:

  1. 此关键字的功能需求是什么?
  2. @escaping 有什么影响?
  3. 有必要写吗?
  4. @autoclosure 的行为是否与 @escape 相同?
  5. 何时使用哪个关键字以及为什么?

这里是 Swift-evolution文件,但从中获益不多。

最佳答案

最重要的区别是 @escaping@noescaping 之间(Swift 3 中没有这样的关键字!)。当闭包被标记为 @noescape 时,您可以确定闭包不会被方法保留(例如执行异步调用),因此您不必担心所有权周期(还有一些其他的小好处)。

@escaping 闭包有时可以在将来保存或调用,因此您必须确保正确处理所有权(例如 [weak self])。

对于 @autoclosure 参见 How to use Swift @autoclosure .简而言之,它允许您在某些情况下跳过闭包周围的大括号。

默认(未指定时)是 Swift 3 中的 @noescaping(参见 rationale)。他们关键字实际上不再存在。只有@escaping

关于ios - @noescape、@escaping 和@autoclosure 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39612938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com