You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift React Native报错:Escaping closure captures non-escaping parameter 'callback'

解决“Escaping closure captures non-escaping parameter 'callback'”错误

错误原因

你这段代码的问题在于:RCTResponseSenderBlock是专为异步回调设计的逃逸闭包类型,但Swift默认会将@objc方法的参数闭包判定为非逃逸(non-escaping)。而你在Purchases.shared.getOfferings的逃逸闭包内部调用了callback,相当于把非逃逸闭包传入了逃逸上下文,违反了Swift的闭包生命周期约束,因此触发错误。

修复方案

只需要给callback参数加上@escaping标记,明确告知Swift这个闭包允许在方法执行结束后被调用或传递:

@objc
func getOffers(_ callback: @escaping RCTResponseSenderBlock) {
  Purchases.shared.getOfferings { (offerings, error) in
    if let error = error {
        print(error.localizedDescription)
    }
    
    self.offering = offerings?.current
    
    callback([offerings?.current])
  }
}

补充说明

  • @escaping关键字的作用是声明闭包可以脱离当前方法的生命周期存在,完全适配getOfferings这类异步API的回调场景。
  • 由于RCTResponseSenderBlock是React Native原生模块的标准回调类型,本身就需要支持异步调用,所以添加@escaping是符合设计逻辑的。

内容的提问来源于stack exchange,提问作者Jerry seigle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:51:18