iOS Swift开发中调用嵌套函数时内部函数未执行问题
问题原因
核心原因两点:
- 代码存在命名冲突:
check函数的参数名与内部嵌套函数名都为a,且二者类型一致,Swift 作用域查找逻辑会优先匹配到传入的闭包参数,导致你以为调用的是内部嵌套函数,实际执行的是外部传入的闭包。 - 缺少显式调用传入闭包的逻辑:你没有编写调用参数闭包的代码,自然不会执行传入的
print("Check Calling")内容。
解决方案
修改参数/内部嵌套函数的名称避免冲突,再按你需要的顺序依次调用即可:
func check(externalClosure: () -> ()){ func a(){ print("A Calling") } // 先执行内部嵌套函数 a() // 再执行传入的外部闭包 externalClosure() }
原有调用代码无需调整:
check { print("Check Calling") }
最终运行输出符合预期:
A Calling Check Calling
内容的提问来源于stack exchange,提问作者Darshan
相关产品推荐
相关产品推荐

