变量、类型与集合
Swift 是静态类型语言,类型推断可以减少书写,但不会取消类型约束。
用你的前端经验理解
Swift 的 let 是不可重新赋值的绑定,var 可变;和 JS const 不同,let 绑定的 struct 也不能直接修改其属性。
为什么需要它
Swift 的类型约束不仅决定能否赋值,也决定哪些操作合法。价格可以是 Double,但显示价格是 String;字典查找可能失败,结果便是 Optional。前端中经常混用的原始值、展示值与缺失值,在 Swift 里最好明确区分。编译错误不是阻碍,而是在提醒你某个数据假设尚未说清。
它是怎样工作的
let 表示绑定不可变。对于数组这类值类型,append 会改变这个值,所以必须用 var;这与 JavaScript 的 const 数组仍能 push 不同。map 产生转换后的新集合,filter 按布尔条件保留元素,原集合不会因此自动变化。金额计算不宜随手依赖二进制浮点的精确相等,实际支付应使用业务规定的 Decimal 或最小货币单位。
把关键概念连起来
基础类型
Int、Double、Bool、String;数字类型之间通常需要显式转换。字符串插值写作 \(name)。
集合
Array 有序,Set 去重,Dictionary 是键值映射。数组元素和字典值有确定的类型。
控制流
if 条件必须是 Bool;switch 要覆盖所有情况。map、filter、reduce 可以复用你熟悉的思路。
let prices = [8, 12, 20]let doubled = prices.filter { $0 > 10 }.map { $0 * 2 }print(doubled) // [24, 40]- $0 是闭包的第一个参数;复杂逻辑可改用明确参数名。
- filter 和 map 返回新数组;没有修改 prices。
用于理解当前概念的代码片段;部分示例需要放入对应工程与作用域,并补齐上下文。
从原始价格生成列表文案
- 保留数值数组用于计算,先 filter 掉不满足条件的元素,再 map 为展示文本;不要先拼接货币符号再比较字符串。
- 把输入声明为 let,可以阻止无意修改。若需要往购物篮追加项目,只让购物篮本身是 var。
- 空数组经过转换仍为空数组,界面应展示空状态;不能把“没有商品”误当成请求失败。
这里需要你亲自判断
不要把 JS 的 truthy/falsy 或隐式类型转换习惯带过来。
做一个小练习
将一组价格过滤到大于 10,再用 map 转成显示字符串。
- 用 [8, 12, 20] 过滤大于 10 的价格并乘以 2,预测结果后再运行。
- 把 nums 改成 let 并尝试 append,解释错误,而不是直接要求 AI 消除报错。
展开参考思路与验收标准
结果应为 [24, 40],原数组仍为 [8, 12, 20]。理解“不可变输入 + 新的输出”后,你就能读懂很多模型转换代码;是否需要 var 取决于真实修改需求。