美文网首页
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 闭包引用类型

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