如何在委托方法触发后调用外部传入的Completion Block?
我懂你的需求啦——你想在调用Method1传入Completion Block后,等委托方法Method2触发时,自动执行这个Block对吧?这其实很简单,只需要在类里把传入的Block暂存起来,等委托方法触发时再调用就行,下面是修改后的完整代码示例:
typealias CompletionBlock = (_ result: NSData?, _ error: NSError?) -> Void class YourClass { // 新增一个属性来暂存传入的Completion Block private var savedCompletion: CompletionBlock? func Method1(block: CompletionBlock) { // 先把外部传入的Block保存到属性里 savedCompletion = block // 这里保留你原来的业务逻辑代码 // SOME CODE } // 修正原代码的语法问题,给委托方法加上参数(因为你要传data和error给Block) func Method2(data: NSData?, error: NSError?) { // 检查暂存的Block是否存在,避免空调用 if let completion = savedCompletion { // 触发Completion Block,传入对应参数 completion(data, error) // 可选操作:调用后清空Block,防止后续重复触发(根据你的业务需求决定要不要加) savedCompletion = nil } } }
简单说明下逻辑:
- 当其他类调用
Method1时,我们把传入的Completion Block保存到savedCompletion这个属性里,这样委托方法就能访问到它。 - 当
Method2(你的委托方法)被触发时,我们先判断savedCompletion有没有值,确保安全后再调用这个Block,并把data和error传进去。 - 最后那句清空Block的代码是可选的:如果你的委托方法只会触发一次,加上它可以避免重复调用;如果需要多次触发,删掉就行。
内容的提问来源于stack exchange,提问作者ketaki Damale
相关产品推荐
相关产品推荐

