我和swift一起工作,从某个地方得到了一个问题,但是不知道在运行这个函数时我会得到什么输出。
import UIKit
var i = 0
var closureArray : [() -> ()] = []
for _ in 1...5{
closureArray.append {
print(i)
}
i += 1
}
当我打字时我会得到什么:-
closureArray[0]()
我知道答案,但我想知道背后的解释。
最佳答案
您正在将函数体附加到closureArray
中,但没有返回类型,因为函数类型没有输入参数和返回类型。
所以只有closureArray
包含5个功能块。
每个元素本身是一个函数,只有一个print
操作将打印数组索引。但如果在for
循环之后调用它们,则它们总是打印i
的最新值
因此closureArray[0]()
将调用第0个索引函数,该函数将只打印“5”,因为i
的最新值为5,并返回void。
解释很简单。