Swift中如何简化忽略Completion Handler的函数调用?
实现简洁调用Swift异步函数的两种方法
当然有对应的语法支持啦!在Swift里,你可以通过两种简单的方式实现这种需求——既保留原来带闭包的调用方式,又能直接用getEvents()触发执行、不关心结果。
方法一:给闭包参数设置默认值
这是最简洁的方案,直接修改原函数,给completion参数加一个默认的空闭包:
func getEvents(completion:@escaping (Bool) -> () = { _ in }) { // 此处执行你的异步操作逻辑 completion(asyncstuffresult) }
这里的{ _ in }是一个忽略参数的空闭包,当你调用getEvents()时,函数会自动使用这个默认闭包,异步操作正常执行,只是不会做任何结果处理。而原来的getEvents { success in /* 处理逻辑 */ }调用方式完全不受影响。
方法二:函数重载
如果你不想修改原函数(比如原函数属于第三方代码,或者担心影响现有调用),可以新增一个不带completion参数的重载函数:
// 原函数保持不变 func getEvents(completion:@escaping (Bool) -> ()) { // 此处执行你的异步操作逻辑 completion(asyncstuffresult) } // 新增的无参数重载版本 func getEvents() { // 内部调用原函数,传一个空闭包忽略结果 getEvents { _ in } }
这样你就可以自由选择:需要处理结果时用带闭包的调用,只想触发执行时直接写getEvents()就行。
两种方法都能完美满足你的需求,选哪种全看你的场景——如果能改原函数,优先选默认参数的方式,代码更精简;如果不能改原函数,重载就是最稳妥的选择。
内容的提问来源于stack exchange,提问作者Sjakelien
相关产品推荐
相关产品推荐

