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’」错误
错误原因
- 未明确指定变量类型,编译器无法推断函数返回类型与目标变量匹配
- 函数返回类型与
SelectedRestaurantDetailViewInfoNotUsingCodable不匹配(比如返回可选类型、数组类型,或完全不同的模型)
修复步骤
- 检查
retrieveSelectedRestaurantDetailViewInfo的函数定义,确认其返回类型是否为SelectedRestaurantDetailViewInfoNotUsingCodable - 像上述正确示例那样明确指定变量类型,让编译器确认类型匹配
- 如果函数返回可选类型(
SelectedRestaurantDetailViewInfoNotUsingCodable?),需用可选绑定或安全解包后再赋值:// 可选绑定示例 if let detailInfo: SelectedRestaurantDetailViewInfoNotUsingCodable = try? await retrieveSelectedRestaurantDetailViewInfo() { // 处理非空数据 }
内容的提问来源于stack exchange,提问作者cg1000
相关产品推荐
相关产品推荐

