#Swift :回调地狱 的解决 —— 通过 task/await 来替代 nested mutiple trailing closure 来进行 回调的解耦

前言:本质是通过 task/await 来替代 nested mutiple trailing closure 来进行 回调的解耦

回调地狱的特点

  1. 多层嵌套:异步函数调用嵌套在另一个异步函数的回调中,层数可能非常深。
  2. 代码可读性差:由于闭包和函数调用深度嵌套,代码的流程难以一目了然。
  3. 错误处理复杂:在多层嵌套中处理错误变得复杂,每一层都可能需要错误处理逻辑。。

在这个例子中,loadPicture(from:completion:onFailure:) 函数通过使用多个完成处理器(completion handlers)来处理网络任务的成功和失败情况。这种设计可以让代码更加清晰地分离网络任务的处理逻辑:一部分处理成功结果,另一部分处理失败情况。相比于使用一个同时处理成功和失败的闭包,使用两个不同的闭包能让代码逻辑更具可读性和模块化。

示例解释

这个函数的核心目的是进行网络任务(如下载图片),并根据任务的结果调用相应的闭包进行处理。通过这种方式,可以将成功和失败的逻辑分开,从而简化每个闭包的逻辑。

函数签名
func loadPicture(from url: String, completion: @escaping (UIImage) -> Void, onFailure: @escaping (Error) -> Void) {
   
    // 模拟网络请求
    DispatchQueue.global().async {
   
        // 模拟成功或失败的情况
        let success = Bool.random()
        if success {
   
            // 模拟下载成功,返回图片
            let image 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值