Swift开发如何实现购物车商品总价的动态实时更新计算
问题原因
- 现有代码存在两个核心问题:
displaySubTotal逻辑硬编码仅支持1~5个商品,还存在计算错误:比如购物车有3个商品时,第三个商品的金额计算漏乘了单价,直接用了数量当金额- 没有在数据变更的时机触发方法执行:删除商品、点击加减按钮修改数量、新增商品这些操作修改完
cartArray的数据后,没有主动调用displaySubTotal刷新UI
优化方案
第一步:重写计算逻辑,适配任意商品数量
用reduce高阶函数计算总价,同时优化可选值处理避免崩溃,还可以格式化金额保留两位小数更符合展示习惯:
func displaySubTotal() { // 遍历所有商品累加小计,自动适配任意商品数量 let total = cartArray.reduce(0.0) { sum, item in guard let price = Double(item.cartItems.price) else { return sum } let quantity = Double(item.cartQuantity) return sum + price * quantity } subtotalPrice.text = String(format: "%.2f", total) }
第二步:在所有数据变更的节点调用该方法
- 购物车新增商品的逻辑执行完成后,调用
displaySubTotal() - 点击商品删除按钮,把对应商品从
cartArray移除后,调用displaySubTotal() - 点击商品的加减数量按钮,修改对应商品的
cartQuantity属性后,调用displaySubTotal()
只要完成以上修改,购物车商品或数量变动时,总价就会实时刷新。
内容的提问来源于stack exchange,提问作者Ahana Chakraborty
相关产品推荐
相关产品推荐

