我和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。
解释很简单。

08-19 11:56