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
相关产品推荐
相关产品推荐

