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

如何在委托方法触发后调用外部传入的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:56:31