在swift中for循环中对象数组的Sum元素:Sum变量不保留值?

lee*_*ger 0 arrays for-loop ios swift

我写了我认为是基本函数来总结数组的值并计算预算中剩余的数量.我使用for循环来对数组的元素求和,然后从预算中减去该值.但是,由于某种原因,sum的值在for循环中正确更新,但for循环中的sum值始终为零.在下面,println"循环中的Sum"是正确的,但println"Sum is"总是等于0. dataModel.spendingDataDisplay是一个对象数组.谢谢你的帮助.

func amountLeftToSpend ()->Double {
        var sum:Double = 0.0
        for spendingItem in dataModel.spendingDataDisplay {
            var sum = spendingItem.amountSpent + sum
            println("Spending Item .amountSpent\(spendingItem.amountSpent)")
            println("Sum in the loop is \(sum)")
        }
        println("Sum is \(sum)")
        let amountLeftInBudget = dataModel.settingsData.weeklyBudget - sum
        println("Amount Left in Budget is \(amountLeftInBudget)")
        return amountLeftInBudget
    }
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 7

正如其他人所指出的,你有两个sum变量.所以你可以通过消除内部var引用来解决这个问题:

var sum:Double = 0.0
for spendingItem in dataModel.spendingDataDisplay {
    sum += spendingItem.amountSpent
}
Run Code Online (Sandbox Code Playgroud)

或者,如果spendingDataDisplay是Swift数组,您还可以使用以下reduce方法:

let sum = dataModel.spendingDataDisplay.reduce(0.0) { $0 + $1.amountSpent }
Run Code Online (Sandbox Code Playgroud)