zl程序教程

您现在的位置是:首页 >  其他

当前栏目

SwiftUI 内功教程之Closures 10 闭包是引用类型及经典用法

经典教程 类型 用法 10 引用 SwiftUI 闭包
2023-09-11 14:18:31 时间

SwiftUI 内功教程之Closures 10 闭包是引用类型及经典用法

什么是闭包

闭包是独立的功能块,可以在代码中传递和使用。Swift中的闭包类似于C和Objective-C中的块以及其他编程语言中的lambda。闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用。这称为关闭这些常量和变量。Swift为您处理捕获的所有内存管理.


闭包是引用类型

闭包可以从定义它的周围环境中捕获常量和变量

func makeIncrementer(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0
    func incrementer() -> Int {
        runningTotal += amount
        return runningTotal
    }
    return incrementer
}

闭包是引用类型

在上面的示例中,incrementBySeven和incrementByTen是常量,但是这些常量引用的闭包仍然能够增加runningTotal它们已捕获的变量。这是因为函数和闭包是引用类型。

每当您将函数或闭包分配给常量或变量时,实际上就是在将该常量或变量设置为对该函数或闭包的引用。在上面的例子中,它是闭合的,所述选择incrementByTen 指的是是恒定的.

这也意味着,如果将闭包分配给两个不同的常量或变量,则这些常量或变量都引用同一闭包。

let alsoIncrementByTen = incrementByTen
alsoIncrementByTen()
// returns a value of 50

incrementByTen()
// returns a value of 60

上面的示例显示调用alsoIncrementByTen与相同incrementByTen。因为它们都引用相同的闭包,所以它们都递增并返回相同的运行总计。