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
相关产品推荐
相关产品推荐

