Swift中循环向字典添加数组元素时数据被覆盖的解决方法
问题原因
你当前的写法每次循环都会直接给parameters["line_items"]赋新的单元素数组,之前存入的内容会被直接覆盖,最终只会保留数组最后一个元素对应的配置。
正确实现方案
方案1:先构建完整数组再赋值(推荐,性能更高)
先单独初始化lineItems数组,循环填充所有元素后一次性存入parameters字典,代码如下:
var parameters: [String: Any] = [:] let array = [1111,1112,1113,1114] // 先声明存储商品项的数组 var lineItems: [[String: Any]] = [] for product in array { lineItems.append(["product_id": product, "quantity": 1]) } // 最后一次性赋值给字典 parameters["line_items"] = lineItems
你也可以用map简化写法,省去手动循环:
let lineItems = array.map { product in ["product_id": product, "quantity": 1] } parameters["line_items"] = lineItems
方案2:循环中动态更新字典内的数组
如果需要中途修改字典内已有的line_items,可以每次先取出已有数组,追加元素后再重新赋值:
var parameters: [String: Any] = [:] let array = [1111,1112,1113,1114] for product in array { // 先取出已有数组,不存在就初始化空数组 var lineItems = parameters["line_items"] as? [[String: Any]] ?? [] lineItems.append(["product_id": product, "quantity": 1]) parameters["line_items"] = lineItems }
内容的提问来源于stack exchange,提问作者Jurgen Smith
相关产品推荐
相关产品推荐

