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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:15:04