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

为何单元测试闭包时出现“Function is unused”编译错误?

问题分析与解决

核心问题

你写的闭包结构是外层闭包返回了一个内层闭包,但这个内层闭包没有被执行,这就是编译器抛出“Function is unused”错误的原因。

原代码里,configuration.router.didSelectProduct被赋值为一个接受navigationController的闭包,这个闭包的返回值是另一个接受product的闭包——但如果没有任何代码去调用这个返回的内层闭包,编译器就会判定这个内层函数未被使用。

两种修正方案

方案1:合并闭包参数(最可能的正确写法)

如果didSelectProduct的定义是接受导航控制器+产品两个参数的闭包(类型类似((UINavigationController, Product) -> Void)?),直接把两个参数放在同一个闭包里:

configuration.router.didSelectProduct = { navigationController, product in
    let vc = More.build(navigationController: navigationController)
    navigationController.pushViewController(vc, animated: true)
}

这样闭包逻辑直接在参数传入后执行,不会产生未使用的内层函数。

方案2:测试时正确调用嵌套闭包

如果didSelectProduct的定义确实是接受导航控制器后返回一个处理产品的闭包(类型类似((UINavigationController) -> ((Product) -> Void))?),那你在单元测试时必须完整调用两层闭包:

// 先传入导航控制器,拿到处理产品的内层闭包
let productHandler = configuration.router.didSelectProduct!(mockNavigationController)
// 再传入产品,执行实际逻辑
productHandler(mockProduct)

如果你的测试代码只执行了外层闭包(传了导航控制器),但没调用返回的内层闭包,就会触发“Function is unused”错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:30:42