如何在表格视图(swift)中获得分数的平均值?

如何在表格视图(swift)中获得分数的平均值?,swift,xcode,core-data,tableview,xcode12,Swift,Xcode,Core Data,Tableview,Xcode12,我想显示输入到实体中的所有值的平均值。基本上,在TableView上按add,会出现一个弹出窗口询问分数,然后将“考试”添加到TableView中。我希望能够把所有的分数加起来,得到他们的平均值,然后我可以把它加到标签上。我试着遵循一些其他教程,但它给了我一个错误 上面的图片是用于上下文的 var i = 0 var sum = 0 for i in 0...methodsExam.count { let title = methodsExam[i]

我想显示输入到实体中的所有值的平均值。基本上,在TableView上按add,会出现一个弹出窗口询问分数,然后将“考试”添加到TableView中。我希望能够把所有的分数加起来,得到他们的平均值,然后我可以把它加到标签上。我试着遵循一些其他教程,但它给了我一个错误

上面的图片是用于上下文的

var i = 0
var sum = 0

    for i in 0...methodsExam.count {
        let title = methodsExam[i]
        let str : String = title.value(forKey: "score") as! String
        sum = sum + Int(str)!
    }
    let avg = sum/methodsExam.count
    
    averageScore.text = "Average: \(avg)"

假设
methodsExam
是[methodsExam]的数组,您可以将循环更改为

var sum = 0.0
for item in methodsExam {
    if let scoreStr = item.score, let score = Double(scoreStr) {
        sum += score
    }
}
let average = sum / Double(methodsExam.count)
为了更精确,我在这里使用了Double

这也可以通过高阶函数实现

let average = methodsExam.reduce(into: 0.0) {
    if let scoreStr = $1.score, let score = Double(scoreStr) { $0 += score }
} / Double(methodsExam.count)
由于我们要用数组计数除法,我们还必须检查数组是否为空,以避免被0除法,因此我们可以将代码放入函数中并执行此操作

func calculateAverage(_ array: [MethodsExam]) -> Double {
    guard !array.isEmpty else { return 0.0 }

    return  array.reduce(into: 0.0) {
        if let scoreStr = $1.score, let score = Double(scoreStr) { $0 += score }
    } / Double(array.count)
}

需要注意的是,我假设
score
可以为零,因为MethodsExam是一个NSManagedObject,而不是因为它将包含零值。如果它真的可以保存零值,那么你需要考虑计算平均值的方法,数组中的所有值或者只有非零值。< /P>添加代码而不是屏幕截图。再次检查循环并读取范围。代码>用于0…数组中的i。计数包括上限。我还建议学习如何调试问题。如果出现“索引超出范围”错误,请设置断点并检查索引。或者添加显示索引的打印语句。您应该能很快发现问题。最好在loop@JoakimDanielson我试试看,谢谢。非常感谢你,但是,不管我做什么,我似乎都得到了“楠”的回报。我做错什么了吗?methodsExam的代码是:var methodsExam:methodsExam=[]我假设这意味着它是一个MethodsExam@aadisach不,这是不正确的,它应该是
var methodsExam:[methodsExam]=[]
。您的代码应该生成编译器错误吗?