闭合内部功能/需要说明

Closure inside function / need explanation

提问人:neuraldag 提问时间:10/2/2023 最后编辑:Peter Mortensenneuraldag 更新时间:10/31/2023 访问量:113

问:

我正在研究闭包,并在书中看到了一个未知的(对我来说)在函数中使用闭包的例子:

func counter() -> () -> Int {
    var count = 0
    let incrementer: () -> Int = {
        count += 1
        return count
    }
    return incrementer
}

但我从未见过这样一种创建闭合的方式。我尝试了通常的一种方法,并且也有效:

func counter() -> Int {
    var count = 0
    let incrementer = { () -> Int in
        count += 1
        return count
    }
    return incrementer()
}

它是如何工作的?它只是一个类型注释吗?

Swift 函数 语法 闭包

评论

0赞 lorem ipsum 10/2/2023
在一个中,您正在返回闭包,而另一个则是闭包的结果

答:

2赞 miner miner 10/11/2023 #1

提供的两个函数都是计数器,您可以使用 或 来编写它。乍一看,它们看起来是一样的,但你会发现你不能多次使用,因为它只有一个值,这意味着你使用了不必要的步骤来制作一个基本的变量。但是,另一方面,您有 ,在通过关键字定义所有者指针后,它像函数一样计数。counter()()counter()counter()1Intcounter()()var

因此,一个定义、使用和释放一个闭包,而另一个定义一个闭包并返回它以允许重用。

评论

0赞 miner miner 10/31/2023
Counter()() 由一个函数组成,该函数进行闭包然后运行它,这样说是为了给两个函数提供身份,因为它们的名称相同。counter() == counter()() 将返回 true,因为它们最初都以 1 响应,但 var spoons = counter();勺子()/*1*/;勺子()/*2*/;var ifd = counter()/*1*/;ifd/*1*/;ifd()/*错误*/;ifd += 1/*2*/;显示 with 代码之间的差异
0赞 HangarRash 10/31/2023
为什么要在你的答案上发表评论,因为它的答案和你的答案一样长?为什么不用其他信息更新您的答案呢?