gpt4 book ai didi

swift - 闭包中的两次返回

转载 作者:可可西里 更新时间:2023-11-01 02:19:00 34 4
gpt4 key购买 nike

我是 swift 的新手。正在阅读 weheartswift 上的闭包。有一节讨论捕获值(value)。这里有两个问题:

  1. 这里的两个return怎么理解?
  2. 为什么这个闭包从变量中捕获以前的值,我不应该每次都从 start 的值开始初始化,它总是 0 吗?

代码:

func makeIterator(start: Int, step: Int) -> () -> Int {

var i = start

return {
i += step
return i
}
}

var iterator = makeIterator(0, 1)

iterator() // 1

iterator() // 2

iterator() // 3

最佳答案

像这样:

var i = start
return /*the following is a closure that returns an Int:*/{
i += step
return i
}/*< end of closure*/

返回的是一个闭包。 { return i } 实际上是一个返回i值的函数。

也可以这样写:

func makeIterator(start: Int, step: Int) -> () -> Int {

var i = start
func iterate() -> Int {
i += step
return i
}
return iterate
}

闭包是功能 + 状态。这里的“状态”是局部变量i

闭包“关闭”i,这意味着每次执行闭包时,它都会查看它可以修改的同一个i即使从函数返回闭包之后也是如此。当您多次调用它时,它会更新其内部状态并返回新值。

关于swift - 闭包中的两次返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32754087/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com