美文网首页swift
Swift之闭包

Swift之闭包

作者: 无意惹东风 | 来源:发表于2018-01-06 16:07 被阅读19次

闭包是自包含的函数代码块,可与你在代码中被传递和使用。swift的闭包和C、OC中的代码块blocks以及其它一些编程语言中的匿名函数较为相似。

闭包可捕获和存储其所在的上下文中的任意常量和变量的引用。也就是我们常说的常量包裹和变量包裹。

闭包通常有三种形式:
1:全局函数是一个有名字但不会捕获任何值的闭包
2:嵌套函数是一个有名字且可以捕获起封闭函数域内值的闭包
3:闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或者常量值的匿名闭包

闭包表达式的语法:

{ (参数) -> 返回值类型 in
    表达式
}

闭包表达式参数 可以是 inout 参数,但不能设定默认值。也可以使用具名的可变参数

let alertVC = UIAlertController()
 alertVC.addAction(UIAlertAction(title: "action1", style: .cancel, handler: nil))
 alertVC.addAction(UIAlertAction(title: "action2", style: .default, handler: nil))
 alertVC.addAction(UIAlertAction(title: "action3", style: .default, handler: { (UIAlertAction) -> Void in
     NSLog("点击了action3")
 }))
 alertVC.addAction(UIAlertAction(title: "action4", style: .default) { _ in
     NSLog("点击了action4")
 })
 self.present(alertVC, animated: true, completion: nil)

上面这个例子就说明了swift中闭包的表现形式以及具体使用
我们可以看到在action3中是一个完整形式的关于UIAlertAction的闭包,而在action4中采用了下划线_来省略了整个闭包参数及返回值。那么显然这种形式的闭包也是可以的。

尾随闭包:
如果你需要将一个很长的闭包表达式作为最后一个参数传递给函数,可以使用尾随闭包来增强函数的可读性。尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。在使用尾随闭包时,你不用写出它的参数标签:

self.present(alertVC, animated: true) {
     NSLog("弹出AlertVC")
 }
// 我们可以将present(alertVC, animated: true)作为一个完整的函数调用,而他后面的{ NSLog("弹出AlertVC") } 就是一个尾随闭包,实际上是把闭包作为present函数的另一个参数进行传递。

闭包中对于变量的捕获和OC中block的局部变量值捕获是相同意义的。闭包本身是一种饮用类型,因为无论是你将函数或闭包赋值给一个常量还是变量,你实际上都是将常量或变量的值设置为对应函数或闭包的引用。

除此之外,闭包含有逃逸闭包和自动闭包两种具体的展现形式。目前尚在学习之中,故本文现下不做过多解释。

以上,就是swift中关于闭包的相关内容。谢谢!

相关文章

  • swift闭包学习

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

  • Swift-闭包

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

  • Swift闭包和函数

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

  • swift4 闭包

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

  • Swift中的闭包

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

  • 100 Days of Swift - Day 06 - 闭包(

    100 Days of Swift - Day 06 - 闭包Closures 6.1 闭包 Swift函数也属于...

  • swift学习

    * 闭包 * 闭包作为属性 ```swift // 声明闭包类型 typealias callba...

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

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

  • iOS&Swift&OC 闭包和Block的相互转化

    一、Swift的闭包 -> OC的block 二、OC的block -> Swift的闭包

  • Swift学习笔记(1)

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

网友评论

    本文标题:Swift之闭包

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