美文网首页
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("当前网络不可用,请检查网络设置")

            }

        }

    }

相关文章

  • iOS swift 逃逸闭包(@escaping)和非逃逸闭

    iOS swift 逃逸闭包(@escaping)和非逃逸闭包 (@noescaping) 逃逸闭包: 逃逸闭包...

  • 逃逸闭包&非逃逸闭包

    逃逸闭包&非逃逸闭包 Swift中的闭包有两种:逃逸闭包和非逃逸闭包,前者表示闭包将在函数返回之后执行;而后者则表...

  • Swift中的闭包

    在Swift中有两种闭包,逃逸闭包(@escaping)和非逃逸闭包(@nonescaping)。从Swift 3...

  • Swift: @escaping 和 @noescaping 是

    @noescaping: 非逃逸闭包类型@escaping: 逃逸闭包类型 Swift 3.0 之后,传递闭包...

  • swift 非逃逸闭包、逃逸闭包的使用场景

    闭包只有在函数中做参数时才会区分逃逸闭包和非逃逸闭包。Swift 3.0之后,传递闭包到函数中的时候,系统会默认为...

  • swift 逃逸闭包和非逃逸闭包的区别

    swift 逃逸闭包和非逃逸闭包的区别 逃逸闭包:闭包做为函数的参数传递时,在函数体结束后被调用,我们就说这个闭包...

  • Swift3:@escaping

    @escaping 在Swift3中,闭包默认是非逃逸的。在Swift3之前,事情是完全相反的:那时候逃逸闭包是默...

  • Swift3:@escaping

    @escaping 在Swift3中,闭包默认是非逃逸的。在Swift3之前,事情是完全相反的:那时候逃逸闭包是默...

  • iOS开发随笔

    1.swift3.0后的闭包默认是非逃逸闭包, 所以在逃逸闭包前需要添加@escaping2.instrument...

  • Swift中的逃逸闭包的理解

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

网友评论

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

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