美文网首页
Swift中的逃逸闭包的理解

Swift中的逃逸闭包的理解

作者: 大佬的世界我不懂 | 来源:发表于2018-11-27 21:12 被阅读0次

    逃逸闭包的书面定义:一个传入函数的闭包如果在函数执行结束之后才会被调用,那么这个闭包就叫做逃逸闭包。

    对定义的理解

    通过定义我们知道,逃逸闭包首先是一个闭包(感觉有点废话),但是逃逸闭包又不是普通的闭包,因为它会在函数结束后才执行(这是特点)。

    什么闭包会在函数执行之后才执行呢?

    很多启动异步操作的函数接受一个闭包参数作为 completion handler。这类启动异步操作的函数会在异步操作开始之后(即“启动异步操作”的函数已经执行完毕)立刻返回,但是闭包直到异步操作结束后才会被调用(即“启动异步操作”函数执行完毕后才被调用)。这中情况很完美的符合了逃逸闭包的定义……

    下面是一个异步的网络请求在网络请求结束后才会调用sucess这个逃逸闭包进行回调

    funcgetDataNew(url:String,params:Parameters,success:@escaping(_result:JSON)->(),failure:@escaping(_error:Any)->()){

            lettemporaryToken = (HRDataSave.hr_getToken2() !="") ?HRDataSave.hr_getToken2() :HRDataSave.hr_getToken()

            let headers: HTTPHeaders = ["Content-Type":"application/json","Accept": "application/json","X-Auth-Token":temporaryToken]

            Alamofire.request("\(HR_BASE_URL)"+url, method: .post, parameters: params, encoding:JSONEncoding.default, headers: headers).responseJSON{ responsein

                switchresponse.result{

                case.success(letvalue):

                    letjson =JSON(value)

                    if(json["result"].intValue==0){

                    ifjson["code"].intValue>0{

                        ifjson["code"].intValue==100&& !popWindowsShow{

                            popWindowsShow=true

                            popWindowsAlertView(toptitle:"提示", message:loginTitle, sureBtnTitle:"知道了", cancleTitle:"", sureClick: {

                                letdeleagte =UIApplication.shared.delegateas!AppDelegate

                                deleagte.singlePointLanding()

                                signalRemove()

                                popWindowsShow=false

                            }, cancleClick: {

                            })

                        }else{

                            if!popWindowsShow{

                                returnJsonMsg(jsonMsg: json)

                            }

                        }

                      }else{

                        success(json)

                      }

                    }else{

                        failure(json["resultMsg"].stringValue)

                        UIApplication.shared.keyWindow?.noticeOnlyText(json["resultMsg"].stringValue)

                    }

                case.failure(leterror):

                    //print("错误原因:\(error.localizedDescription)")

                    failure(error)

                    UIApplication.shared.keyWindow?.noticeOnlyText("当前网络不可用,请检查网络设置")

                }

            }

        }

    相关文章

      网友评论

          本文标题:Swift中的逃逸闭包的理解

          本文链接:https://www.haomeiwen.com/subject/ucvnqqtx.html