swift - 如何在 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)
}
}
}
请帮忙,谢谢。
解决方案
如果您不使用SwiftUI
,请不要将属性设置为@State
. 相反,将updateTotalGrade()
函数标记为mutating
:
var totalGrade: Double // @State removed
...
mutating func updateTotalGrade() {
...
推荐阅读
- c# - PowerShell / Asp.net c# / Exchange
- github - 如何在 Github Actions 中的 git 命令中呈现变量
- spring - Kotlin 的箭
和交易 - node.js - 对 mongoDB 的 Nodejs GET 请求返回未定义
- xml - 艰巨的 NLP 任务并帮助我使用更少的撒克逊变量
- c - 如何在c中实现定点数的幂运算
- json - PostgreSQL - 在 JSON 对象中聚合值而不指定键
- php - 如果我通过 Axios 从客户端调用但从服务器端调用它,cookie 不会保存在浏览器中。我不知道是什么原因
- linq - Asp.net Core 5.0 Linq Take(1).ElementAt(index)
- c# - 如何在 WF 中获取 applicationcontext 类的处理程序?