You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI:如何更新嵌套结构体数组中的指定变量?

Swift修改嵌套数据集中指定项的方法

你的monthlyOutput是一个包含元组的数组,要修改chartline为"Daylight"下"Feb"对应的value,需要逐层定位元素后修改,具体步骤如下:

直接修改现有元组结构的代码

// 定位到chartline为"Daylight"的元组索引
if let chartIndex = monthlyOutput.firstIndex(where: { $0.chartline == "Daylight" }) {
    // 取出data数组的可变副本
    var updatedData = monthlyOutput[chartIndex].data
    // 找到"Feb"对应的WeatherData元素索引
    if let dataIndex = updatedData.firstIndex(where: { $0.month == "Feb" }) {
        // 修改目标value值
        updatedData[dataIndex].value = 1 // 替换为你需要的数值
        // 将修改后的数组存回原变量
        monthlyOutput[chartIndex].data = updatedData
    }
}

优化建议:改用结构体替代元组

元组的可读性和扩展性较差,建议把外层的元组改成结构体,后续维护更方便:

// 定义ChartData结构体
struct ChartData {
    var chartline: String
    var data: [WeatherData]
}

// 重新定义monthlyOutput
@State var monthlyOutput = [
    ChartData(chartline:"Daylight", data: [
        WeatherData(month:"Jan", value: 42),
        WeatherData(month:"Feb", value: 53)
        // 其他月份数据
    ])
]

修改逻辑和之前完全一致,只是语法更直观。

为什么你的原写法无效?

你之前的写法存在语法错误,Swift不支持直接通过[chartline:"Daylight",[WeatherData.month("Feb"), WeatherData.value]] = 1这种方式直接修改嵌套结构内的元素,必须逐层定位到目标元素,通过可变副本修改后再赋值回原变量。

内容的提问来源于stack exchange,提问作者Edward Hasted

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:50:25