首页 > 解决方案 > 在 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结构的函数来随机化它们将显示的数字,但只触发一次。我应该解决什么问题?

标签: arraysswiftswiftui

解决方案


这是因为dice需要引用您的原始结构而不是副本

尝试更换:

func rollButtonPressed() {
    for dice in viewArray {
        dice.roll()
    }
}

和:

func rollButtonPressed() {
    for index in viewArray.indices {
        viewArray[index].roll()
    }
}

推荐阅读