美文网首页
Swift 闭包引用类型

Swift 闭包引用类型

作者: 爆炸的白菜君 | 来源:发表于2022-03-08 10:51 被阅读0次
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0
    func incrementer() -> Int {
        runningTotal += amount
        return runningTotal
    }
    return incrementer
}

上面的函数返回一个闭包,我们使用一个常量去接受这个返回值

let incrementByTen = makeIncrementer(forIncrement: 10)

这里的 incrementByTen 常量就是 incrementer 这个函数引用

incrementByTen()
//10
incrementByTen()
// 20
incrementByTen()
// 30

这里我们可以看到 runningTotal 这个值,在我们使用返回闭包调用的时候是有累积的。这就说明runningTotal被一个引用类型的值持有着没有被释放。这个引用类型应该就是 incrementByTen

let incrementBySeven = makeIncrementer(forIncrement: 7)
incrementBySeven()
// 7
incrementByTen()
//40

这里我们可以明显的看到,新的常量incrementBySeven和之前的常量incrementByTen有着不同的runningTotal,因为他们是两个独立的引用类型。

这里说的引用类型可以类比于类和数组以及字典这类型的数据。他们的生命周期都是依靠引用计数来维持。

let alsoIncrementByTen = incrementByTen
alsoIncrementByTen()
// 50

incrementByTen()
// 60

这里只是incrementByTen的引用计数变成了2,并没有开辟新的内存空间,所以runningTotal值还是会累计。

相关文章

  • 闭包

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

  • Swift 闭包引用类型

    上面的函数返回一个闭包,我们使用一个常量去接受这个返回值 这里的 incrementByTen 常量就是 incr...

  • Swift入门二(对象函数)

    函数 闭包 GCD 尾随闭包 闭包循环引用解决(OC) 闭包循环引用解决(swift推荐) 面向对象 命名空间: ...

  • Swift: @escaping 和 @noescaping 是

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

  • swift学习

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

  • Swift语法--12-3闭包的循环引用

    Swift语法--12-3闭包的循环引用 闭包循环引用产生条件 如果在HttpTool中有对闭包进行强引用,则会形...

  • swift闭包的相关知识

    swift闭包的相关知识,闭包是引用类型1.嵌套函数2.闭包表达式3.利用上下文推断类型4.捕获上下文中的常量和变...

  • 2019-12-04

    swift 闭包循环引用产生以及处理

  • Day2

    1 单方向的引用不会产生循环引用。循环引用:闭包引用了self,self引用了闭包。Swift推荐使用解决循环引用...

  • swift- 闭包一

    /*• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包*/

网友评论

      本文标题:Swift 闭包引用类型

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