【问题标题】:Does Objective-C have an equivalent to Swift's @escaping annotation?Objective-C 是否与 Swift 的 @escaping 注释等效?
【发布时间】:2019-03-23 13:38:58
【问题描述】:

在 Swift 中,转义闭包参数使用 @escaping 注释。 Objective-C 中是否有任何等价物,以便生成的 Swift 接口被标记为@escaping

【问题讨论】:

  • Objective C 不区分转义块和非转义块,所以如果将所有 ObjC 接口作为转义导入 Swift,我也不会感到惊讶。
  • 这将是手动的,但 NS_SWIFT_NAME 是否允许您传递该信息

标签: objective-c swift


【解决方案1】:

是的,但这与您在问题中的建议相反。规则是,Objective-C 不可为空的块作为@escaping 函数自动翻译成Swift,除非它被明确标记为(NS_NOESCAPE ^)

【讨论】:

  • 这可能可以追溯到我们有 @escaping 而我们有 @noescape 之前的时间。所以这已经融入到 Objective-C 中,现在即使 Swift 已经改变了极性,也没有必要改变它。
  • 只是一个评论(因为这让我很反感):只有在 Objective-C 块参数标记为 _Nonnull 时,您才会在 Swift 生成的界面中看到 @escaping。否则会作为 IUO 导入,默认转义。
  • @MartinR 是的,我看到(^ __nullable) 块缺少@escaping 参数,尽管它实际上确实逃脱了。嗯。
  • @MartinR 太奇怪了。 - 我在规则声明中添加了“不可为空”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 2017-12-17
  • 1970-01-01
  • 2016-06-17
相关资源
最近更新 更多