LESSON 06 / 577 分钟

变量、类型与集合

Swift 是静态类型语言,类型推断可以减少书写,但不会取消类型约束。

用你的前端经验理解

Swift 的 let 是不可重新赋值的绑定,var 可变;和 JS const 不同,let 绑定的 struct 也不能直接修改其属性。

为什么需要它

Swift 的类型约束不仅决定能否赋值,也决定哪些操作合法。价格可以是 Double,但显示价格是 String;字典查找可能失败,结果便是 Optional。前端中经常混用的原始值、展示值与缺失值,在 Swift 里最好明确区分。编译错误不是阻碍,而是在提醒你某个数据假设尚未说清。

它是怎样工作的

let 表示绑定不可变。对于数组这类值类型,append 会改变这个值,所以必须用 var;这与 JavaScript 的 const 数组仍能 push 不同。map 产生转换后的新集合,filter 按布尔条件保留元素,原集合不会因此自动变化。金额计算不宜随手依赖二进制浮点的精确相等,实际支付应使用业务规定的 Decimal 或最小货币单位。

把关键概念连起来

1

基础类型

Int、Double、Bool、String;数字类型之间通常需要显式转换。字符串插值写作 \(name)。

2

集合

Array 有序,Set 去重,Dictionary 是键值映射。数组元素和字典值有确定的类型。

3

控制流

if 条件必须是 Bool;switch 要覆盖所有情况。map、filter、reduce 可以复用你熟悉的思路。

Swift · 示例片段
let prices = [8, 12, 20]let doubled = prices.filter { $0 > 10 }.map { $0 * 2 }print(doubled) // [24, 40]
  • $0 是闭包的第一个参数;复杂逻辑可改用明确参数名。
  • filter 和 map 返回新数组;没有修改 prices。

用于理解当前概念的代码片段;部分示例需要放入对应工程与作用域,并补齐上下文。

从原始价格生成列表文案

  1. 保留数值数组用于计算,先 filter 掉不满足条件的元素,再 map 为展示文本;不要先拼接货币符号再比较字符串。
  2. 把输入声明为 let,可以阻止无意修改。若需要往购物篮追加项目,只让购物篮本身是 var。
  3. 空数组经过转换仍为空数组,界面应展示空状态;不能把“没有商品”误当成请求失败。

这里需要你亲自判断

不要把 JS 的 truthy/falsy 或隐式类型转换习惯带过来。

做一个小练习

将一组价格过滤到大于 10,再用 map 转成显示字符串。

  1. 用 [8, 12, 20] 过滤大于 10 的价格并乘以 2,预测结果后再运行。
  2. 把 nums 改成 let 并尝试 append,解释错误,而不是直接要求 AI 消除报错。
展开参考思路与验收标准

结果应为 [24, 40],原数组仍为 [8, 12, 20]。理解“不可变输入 + 新的输出”后,你就能读懂很多模型转换代码;是否需要 var 取决于真实修改需求。

Swift 中 let items = [1, 2] 之后可以 items.append(3) 吗?

继续查阅官方资料
Swift 官方文档

本课聚焦核心认知。具体 API、系统要求与发布政策,以当前官方文档和工程验证为准。

答对理解题后即可标记完成