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

Swift中“Extra trailing closure passed in call”错误的解决方法

解决Swift异步函数调用的两个错误:Extra trailing closure + 类型不匹配

先解决「Extra trailing closure passed in call」错误

错误原因

你误将async throws修饰的异步函数当作闭包回调型函数调用了。这类异步函数不需要传入尾随闭包,它的执行结果通过await获取,错误通过throws抛出,而非闭包回调。

错误写法示例(你可能写了类似代码)

// 错误:给异步函数传了尾随闭包,该函数不接受闭包参数
retrieveSelectedRestaurantDetailViewInfo { info in
    // 你的处理逻辑
}

正确调用方式

必须在异步上下文(比如Task内部、标记为async的函数中)使用try await语法调用:

// 示例1:在Task中调用(适合在非异步函数内触发异步操作)
Task {
    do {
        // 明确指定变量类型,同时为第二个错误的修复做铺垫
        let detailInfo: SelectedRestaurantDetailViewInfoNotUsingCodable = try await retrieveSelectedRestaurantDetailViewInfo()
        // 这里处理获取到的餐厅详情数据
    } catch {
        // 处理函数抛出的错误
        print("获取餐厅详情失败:\(error.localizedDescription)")
    }
}

// 示例2:在async函数中调用
func fetchRestaurantDetail() async throws {
    let detailInfo: SelectedRestaurantDetailViewInfoNotUsingCodable = try await retrieveSelectedRestaurantDetailViewInfo()
    // 处理数据
}

解决「Cannot assign value of type '_' to type ‘SelectedRestaurantDetailViewInfoNotUsingCodable’」错误

错误原因

  1. 未明确指定变量类型,编译器无法推断函数返回类型与目标变量匹配
  2. 函数返回类型与SelectedRestaurantDetailViewInfoNotUsingCodable不匹配(比如返回可选类型、数组类型,或完全不同的模型)

修复步骤

  • 检查retrieveSelectedRestaurantDetailViewInfo的函数定义,确认其返回类型是否为SelectedRestaurantDetailViewInfoNotUsingCodable
  • 像上述正确示例那样明确指定变量类型,让编译器确认类型匹配
  • 如果函数返回可选类型(SelectedRestaurantDetailViewInfoNotUsingCodable?),需用可选绑定或安全解包后再赋值:
    // 可选绑定示例
    if let detailInfo: SelectedRestaurantDetailViewInfoNotUsingCodable = try? await retrieveSelectedRestaurantDetailViewInfo() {
        // 处理非空数据
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:42:57