让我们输入for循环

时间:2014-09-21 13:32:46

标签: swift constants let

我和Swift一起玩。 为什么可以在for循环中声明let类型?据我所知,let意味着不变,所以我很困惑。

    func returnPossibleTips() -> [Int : Double] {
        let possibleTipsInferred = [0.15, 0.18, 0.20]
        //let possibleTipsExplicit:[Double] = [0.15, 0.18, 0.20]

        var retval = Dictionary<Int, Double>()
        for possibleTip in possibleTipsInferred {
            let inPct = Int(possibleTip * 100)
            retval[inPct] = calcTipWithTipPct(possibleTip)
        }

    return retval

    }

3 个答案:

答案 0 :(得分:5)

inPct常量的生命周期仅在循环迭代期间,因为它是块作用域的:

for i in 1...5 {
    let x = 5
}
println(x) // compile error - Use of unresolved identifier x

在每次迭代中inPct都引用一个新变量。您无法在任何迭代中分配任何inPct,因为它们是使用let声明的:

for i in 1...5 {
    let x = 5
    x = 6 // compile error
}

答案 1 :(得分:1)

在您定义:let possibleTipsInferred = [0.15, 0.18, 0.20]时的基本单词中,这意味着possibleTipsInferred只读变量。你可以迭代它但不改变它。

此外,在Swift中你不能写:

let a:Int?
a = 5      // compile ERROR

因为a的值为nil,您无法对其进行更改。


for..in循环中,每次迭代i都是重新创建并在每个循环中接收一个新实例。

因此,您可以使其保持不变并写入let

答案 2 :(得分:0)

for循环执行一系列语句,因此每次循环时我们都在一个新的&#34;范围内。&#34;这与C处理循环的方式非常相似。

每次我们运行for循环时,都会释放堆栈常量,以便我们可以重新分配 inPct 的值。

如果我们在for循环之外预先声明了一个变量并给它一个值,我们每次运行for循环时都会更新变量的值。

这是指向swift for for循环文档的链接:Control Flow