提问人:neuraldag 提问时间:10/2/2023 最后编辑:Peter Mortensenneuraldag 更新时间:10/31/2023 访问量:113
闭合内部功能/需要说明
Closure inside function / need explanation
问:
我正在研究闭包,并在书中看到了一个未知的(对我来说)在函数中使用闭包的例子:
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()
}
它是如何工作的?它只是一个类型注释吗?
答:
2赞
miner miner
10/11/2023
#1
提供的两个函数都是计数器,您可以使用 或 来编写它。乍一看,它们看起来是一样的,但你会发现你不能多次使用,因为它只有一个值,这意味着你使用了不必要的步骤来制作一个基本的变量。但是,另一方面,您有 ,在通过关键字定义所有者指针后,它像函数一样计数。counter()()
counter()
counter()
1
Int
counter()()
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
为什么要在你的答案上发表评论,因为它的答案和你的答案一样长?为什么不用其他信息更新您的答案呢?
上一个:闭合内部功能/需要说明
下一个:使用闭合保留价值的咖喱功能
评论