Swift实现带参数回调函数,在Objective-C调用时回调参数无自动补全如何解决
问题原因
你在Swift闭包中使用_只是省略了Swift侧的参数外部标签,Objective-C侧无法直接抓取到闭包的内部参数名,所以自动补全时不会生成参数名,多数情况下也和Xcode缓存未更新有关。
解决方案
方案1:通过@objc修饰的闭包别名定义(推荐,复用性更强)
提前定义Objective-C可识别的闭包类型,明确标注参数名,兼容性最好:
// 定义全局/类内的闭包别名,必须加@objc修饰 @objc typealias SuccessCallback = () -> Void @objc typealias FailureCallback = (_ error: NSError?) -> Void // 函数直接引用别名即可 @objc func myFunction (param1: String, success: @escaping SuccessCallback, failure: @escaping FailureCallback)
方案2:直接使用原有写法清理缓存即可
如果不想定义别名,你现有的写法本身符合语法要求,只需要清理Xcode缓存即可生效:
// 你的原写法本身是符合要求的 @objc func myFunction (param1: String, success: @escaping ()->(), failure: @escaping (_ error: NSError?)->())
注意:修改完成后必须清理Xcode缓存再测试:按Command + Shift + K清理构建产物,删除~/Library/Developer/Xcode/DerivedData下对应项目的缓存文件夹,重启Xcode后即可看到自动补全带error参数名的回调代码。
修改后Objective-C侧自动补全的代码会自动生成参数名:
[self.swiftClass myFunction:myParam success:^{ // 成功逻辑 } failure:^(NSError * _Nullable error) { // 失败逻辑 }];
内容的提问来源于stack exchange,提问作者Etep
相关产品推荐
相关产品推荐

