美文网首页
Swift 中的闭包

Swift 中的闭包

作者: 90后的晨仔 | 来源:发表于2019-02-26 23:12 被阅读0次

1.什么是闭包?

   在苹果给出的官方文档上给出了这样的一段代码,我觉得对理解闭包有很大的帮助。

func returnFifteen() -> Int {
    var y = 10
    func add() {
        y += 5
    }
    add()
    return y
}
returnFifteen()

分析:从代码来看:
(1)、一个函数中嵌套了另外一个函数。
(2)、嵌套的内部函数可以访问外部函数的变量。
(3)、在函数的外部却无法访问函数内的变量。
#总结:对象一级一级地向上寻找父对象的变量,父对象的所有变量,对子对象都是可见的,反之则不可见,这样的一个"链式作用域"结构就是闭包。

2.闭包的特点有哪些?

  • 函数可以嵌套函数,嵌套的函数可以访问外部函数中声明的变量。
  • 函数可以返回另一个函数作为其值。
func makeIncrementer() -> ((Int) -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
increment(7)
  • 函数可以将另一个函数作为其参数之一。
func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}
func lessThanTen(number: Int) -> Bool {
    return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(list: numbers, condition: lessThanTen)

3.闭包的用途

分析到这里我们不难看出:函数实际上是闭包的一种特殊情况,所以也可以这样简单的理解

<1、闭包就是一个桥梁,它将内部函数和外部函数连接起来,然后可以读取函数内部的变量。
<2、闭包可以延长变量的生命周期。

4.闭包注意事项

.1)闭包会使函数中的变量都被保存在内存中,会有内存消耗、所以希望能够在刀尖上使用它吧。
.2)闭包会在父函数外部,改变父函数内部变量的值。所以使用时候需要谨慎一些。

5.闭包的几种特殊形式

(1).匿名闭包({})

numbers.map({ (number: Int) -> Int in
    let result = 3 * number
    return result
})

(2)、当已知闭包的类型(例如委托的回调)时,可以省略其参数的类型,返回类型或两者。单个语句闭包隐式返回其唯一语句的值。

let mappedNumbers = numbers.map({ number in 3 * number })
print(mappedNumbers)
// Prints "[60, 57, 21, 36]"

(3)、您可以按编号而不是按名称引用参数 - 这种方法在非常短的闭包中特别有用。作为函数的最后一个参数传递的闭包可以在括号后面立即出现。当闭包是函数的唯一参数时,可以完全省略括号。

let sortedNumbers = numbers.sorted { $0 > $1 }
print(sortedNumbers)
// Prints "[20, 19, 12, 7]"

相关文章

  • Swift-闭包

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

  • Swift闭包和函数

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

  • swift4 闭包

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

  • Swift学习笔记(1)

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

  • swift中的闭包

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

  • Swift总结

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

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

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

  • 闭包

    闭包 本节内容包括: 闭包表达式 尾随闭包 值捕获 闭包是引用类型 Swift 中的闭包与 C 和 Objecti...

  • Swift入门基础5——闭包

    何为闭包? Swift中的闭包和OC中的block很相似(其实也有其他语言有闭包的概念)。所谓闭包,就是可以捕获其...

  • swift学习笔记 ⑥ —— 闭包

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

网友评论

      本文标题:Swift 中的闭包

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