arrays - 在 Swift UI 中的结构数组上运行函数
问题描述
我正在尝试构建一个骰子滚轮,我可以在其中将骰子添加到阵列中,然后在阵列中使用随机数滚动每个骰子(因此每个骰子都有不同的数字)。我当前的 Dice 结构在这里:
struct Dice: Identifiable, Hashable {
var id = UUID()
var displayValue: String
var initialValue: Int
var endingValue: Int
mutating func roll() {
let randomInt = Int.random(in: initialValue..<endingValue)
displayValue = "\(randomInt)"
print("Initial: \(initialValue), EndingValue: \(endingValue), Display: \(displayValue)")
}
}
在主视图中,我有一个数组: @State var viewArray: [Dice] = []
我有一个“掷骰子”的 SwiftUI 按钮:
Button(action: rollButtonPressed, label: { Text("Roll Dice") })
这触发了这个功能(我有我的错误):
func rollButtonPressed() {
for dice in viewArray {
dice.roll()
}
}
我遇到的问题是dice.roll
它会引发错误Cannot use mutating member on immutable value: dice is a let constant
我不知道如何解决这个问题,我的假设是我需要创建一个循环来触发roll()
每个Dice
结构的函数来随机化它们将显示的数字,但只触发一次。我应该解决什么问题?
解决方案
这是因为dice
需要引用您的原始结构而不是副本。
尝试更换:
func rollButtonPressed() {
for dice in viewArray {
dice.roll()
}
}
和:
func rollButtonPressed() {
for index in viewArray.indices {
viewArray[index].roll()
}
}
推荐阅读
- java - listAll() 不适用于 Android 中的 firebase
- python - Pandas groupby 具有针对大型数据集和大量组的自定义函数
- javascript - 是否可以使用 JavaScript 在页面上的亮模式和暗模式之间切换?
- python - 如何隐藏打印文本
- typescript - 如何在 vue.js 版本 3 中上传文件
- azure-data-factory - 调试和触发管道执行两次
- scala - 使用 Gatling 发出动态请求
- javascript - 反应重新渲染表格的每个单元格
- excel - 按月周期的 VBA 透视过滤器
- c# - 获取 TcpListener 的自动分配的本地 IP 地址