从厨房到代码台:用做菜思维理解iOS开发 - Swift入门篇③
本章重点
- 熟悉常量和变量的声明和使用
- 了解类型注解
- 了解标识符命名规范
1、常量与变量:定量的食材 vs. 变化的调味
在烹饪(编程)中,我们需要地方来存放各种信息(食材和调味料)。Swift 提供了两种"容器"来存放它们:
常量 (Constant):使用
let
关键字来声明。- 烹饪比喻:一份精确计量的、一次性使用的食材。比如菜谱要求"100克面粉",一旦量好,这个"100克"就不应该再改变了。
- 作用:这保证了数据的稳定性,在程序运行中不会被意外修改。
- 使用场景:当你知道一个值在程序的整个生命周期内都不应该改变时。例如:用户的出生日期、π 的值(3.14159…)。
- 最佳实践:优先使用
let
。这是一种更安全的编程习惯,能防止你无意中修改了不该变动的数据。只有当你确定一个值需要被改变时,才使用var
。
变量 (Variable):使用
var
关键字来声明。- 烹饪比喻:一个在烹饪过程中随时可以添加的调味瓶。比如你可以随时往锅里加盐,盐的"总量"是变化的。
- 作用:它的值在之后可以被随意修改。
- 使用场景:当一个值需要被追踪和更新时。例如:一道菜的当前温度、文章的点赞数、游戏得分。
在 Playground 中动手试试:
// --- 常量 let ---
let mainIngredient = "鸡蛋" // 这道菜的主食材,定下来就不改了
let numberOfEggs = 4 // 需要4个鸡蛋,这个数量是固定的
print("主食材是: " + mainIngredient)
如果重新赋值程序就会报错
接下来,再试一试 var
,现在可以正常重新赋值,随时改变变量的值
// --- 变量 var ---
var waterTemperature = 20 // 锅里水的温度,初始为20度(室温)
print("开始烧水,当前水温: \(waterTemperature)度")
waterTemperature = 100 // 水烧开了
print("水已烧开,当前水温: \(waterTemperature)度")
需要注意,常量和变量必须先声明才能使用,也就是说在变量名的签名得先用let
或var
告诉系统它是什么才能拿来用
2、类型注解:给你的"食材盒"贴上标签
通常,Swift 非常聪明,它可以根据你放入的"食材"自动判断出这个"盒子"应该是什么类型。这叫做类型推断 (Type Inference)。
let name = "番茄炒蛋"
👉 Swift 知道name
是个字符串 (String)。let quantity = 2
👉 Swift 知道quantity
是个整数 (Int)。
关于推导出来的类型,可以通过按住option
键,此时光标会变成?
形状,然后点击变量,就可以看到对应的类型了
但有时,我们需要更明确地告诉 Swift 这个盒子只能装特定类型的食材。这时就需要类型注解 (Type Annotation)。
- 烹饪比喻:给你的食材保鲜盒上贴一个标签,比如"只放蔬菜"或"只放调味料"。
语法:在常量或变量名后加上冒号 (:
) 和类型名。
// 明确告诉 Swift,dishName 这个容器只能装字符串 (String)
let dishName: String = "麻婆豆腐"
// 明确指定菜的价格是 Double 类型,以支持小数
// Double 可以简单理解为带小数点的数字
var price: Double = 38.5
又或者,我们现在没有初值可以给变量赋值
// 声明一个变量,但暂时不给它赋值(比如等用户输入)。
// 这种情况下,必须使用类型注解,告诉 Swift 将来要存什么类型的数据。
var customerNotes: String
// ... 后面可以根据用户的点单备注再给它赋值
customerNotes = "不要放葱"
4、命名规范:取个好名字很重要
给常量和变量取一个好名字,能让你的菜谱(代码)清晰易读。
- 风格:使用小驼峰命名法 (lowerCamelCase)。名字以小写字母开头,后面的每个单词首字母大写。
- 清晰性:名字要能清晰地表达出它存储的是什么内容。
// 糟糕的命名 👎
let n = "宫保鸡丁"
let p = 42
let a = "北京"
// 推荐的命名 👍
let dishNameForOrder = "宫保鸡丁"
let priceInCents = 4200
let deliveryAddress = "北京"
5、注释:给菜谱加小贴士
注释是给开发者看的,因此不会被当成代码执行
- 单行注释:用 //
// 这是主食材 let mainIngredient = "鸡蛋"
- 多行注释:用 /* … */
/* 这里可以写多行说明, 比如解释复杂步骤。 */ var steps = ["切菜", "炒菜"]