美文网首页
Swift中的闭包学习

Swift中的闭包学习

作者: 傻傻小萝卜 | 来源:发表于2019-11-28 11:32 被阅读0次

 由于在过去的OC项目中总是使用block,所以一旦使用swift写项目的时候总是避免不了回念Block,为了能够快速的搭建项目,加紧学习了一下闭包。

为了项目的使用,我直接根据功能区学习闭包,我需要的是OC中那种存放在函数中的,如加载数据一样的,可以定义的,调用后有返回值的,大体看了一下闭包的概念,我需要是逃逸闭包

首先如我们在OC中一般,对block起个别名,以便好调用,定义一个按钮点击传tag的闭包

typealias ClickHandler= (_selectTag:Int)->Void

在该类中,再次定义一个属性,以便于在其他方法中调用

var clickHandler:ClickHandler!

定义一个方法,用于子类调用,传入闭包,在这里使用到了逃逸闭包

 func showAlertViewWithType(showType:ShowAlertType,clickHandler:@escaping ClickHandler){

        showAlert()

        self.clickHandler= clickHandler

    }

生成子类调用方法

showAlertView.showAlertViewWithType(showType: .defaulted) { (selectTag)in

            print("点击的按钮tag\(selectTag)"

        }

调用类中的逃逸闭包,就可以看到点击的selectTag

showAlertView.clickHandler(12)

这便是我们一般开发项目中使用到的block样式的逃逸闭包

接下来真正的认识一下swift中的闭包

闭包表达是一个轻量级语法所写的可以捕获上下文中常量和变量值的没有名字的闭包。(和block一个样,捕获值的特性)

{(parameters) —>(returnType) in 

statements

}

非逃逸闭包

非逃逸闭包的生命周期:

(1)把闭包作为参数传递给函数。

(2)函数中运行该闭包。

(3)退出函数。

非逃逸闭包被限制在函数内,当函数退出时,该闭包的引用计数不会增加,也就是说其引用计数在进入函数和退出函数时保持不变。

逃逸闭包

当一个闭包作为参数传到一个函数中,但是这个闭包在函数返回之后才被执行,我们称该闭包从函数中逃逸。

逃逸闭包生命周期长于相关函数,当函数退出时,逃逸闭包的引用仍然被其他对象持有,不会再相关函数结束后释放。

闭包参数默认是非逃逸类型。如果需要其逃逸类型的闭包,可以使用关键字@escaping

逃逸闭包使用场景

异步调用:如果需要调度队列中异步调用闭包,这个队列会持有闭包的引用,至于什么时候调用闭包,或者闭包什么时候运行结束都是不可预知的。

存储:需要存储闭包作为属性,全局变量或者其他类型做稍后使用。

https://www.jianshu.com/p/856c168f49d1

相关文章

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • swift学习笔记 ⑥ —— 闭包

    Swift学习笔记 - 文集 闭包,就是能够读取其他函数内部变量的函数。Swift 中的闭包与 C 和 OC 中的...

  • Swift5.x-枚举(中文文档)

    引言 继续学习Swift文档,从上一章节:闭包,我们学习了Swift闭包相关的内容,如闭包的定义和使用、闭包的简写...

  • swift闭包学习

    闭包作为参数 参考 Swift学习之闭包

  • swift4 闭包

    swift 闭包 闭包:swift 中 函数是闭包的一种类似于oc的闭包闭包表达式(匿名函数) -- 能够捕获上下...

  • swift中的闭包

    swift中的闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用。swift中的闭包与C和Objective...

  • Swift总结

    1.闭包 swift中的闭包类似于oc中的block回调,但是swift的闭包有很多种写法,具有多变性,今天就来总...

  • swift 闭包(闭包表达式、尾随闭包、逃逸闭包、自动闭包)

    闭包是自含的函数代码块,可以在代码中被传递和使用 闭包和swift的对比 Swift 中闭包与OC的 block ...

网友评论

      本文标题:Swift中的闭包学习

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