首页 > 解决方案 > 如何在 Swift 中改变结构的属性?

问题描述

我是新来的。我有一个名为 Class 的结构,它代表学生将参加的课程,我有一个名为 updateTotalGrade 的方法,它根据作业的成绩更新总成绩。我注意到的是,在我最初设置后,我无法更改 totalGrade 的值。

这是我的结构类创建函数的代码,它创建并返回一个类,我将总成绩设置为 0.72,然后使用我的方法对其进行更新。

var cl = Class(id: UUID(), className: "Physics 109: Physics in the Arts (002)", totalGrade: 0.72, categories: categories)
cl.updateTotalGrade()

这是 Class 结构和 updateTotalGrade 方法。基本上问题是它永远不会改变 totalGrade,totalGrade 总是 0.72

struct Class: Equatable, Identifiable{
    var id = UUID()
    // Class name
    @State var className:String
    // Total grade
    @State var totalGrade:Double
    // List of categories
    @State var categories = [Category]()
    
    static func == (class1: Class, class2: Class) -> Bool{
        return class1.className == class2.className
    }
    
    func updateTotalGrade(){
        // In case a category is empty, increase the relative weight of other categories
        var totalWeight = 0.0
        for category in categories{
            if (!category.assignments.isEmpty){
                totalWeight += category.categoryWeight
            }
        }
        
        totalGrade = 0.0
        for category in categories{
            totalGrade += category.getGrade() * (category.categoryWeight/totalWeight)
        }
    }
}

请帮忙,谢谢。

标签: swift

解决方案


如果您不使用SwiftUI,请不要将属性设置为@State. 相反,将updateTotalGrade()函数标记为mutating

var totalGrade: Double // @State removed
...
mutating func updateTotalGrade() {
...

推荐阅读