题目
Swift中var与let的区别及使用场景
信息
- 类型:问答
- 难度:⭐
考点
变量声明,常量声明,类型推断,可变性
快速回答
在Swift中:
var声明可变变量,值可修改let声明不可变常量,值不可修改- 两者都支持类型推断,编译器自动推导数据类型
- 优先使用
let保证数据安全
1. 核心区别
var(变量):用于声明值可修改的存储单元。声明后可以重新赋值。
let(常量):用于声明不可变的存储单元。声明后值不可更改。
2. 代码示例
// 变量示例
var count = 10 // 类型推断为Int
count = 20 // 允许修改
// 常量示例
let maxAttempts = 3 // 类型推断为Int
// maxAttempts = 5 // 编译错误:不可修改3. 类型推断机制
- Swift编译器能根据初始值自动推导数据类型
- 适用于
var和let两种声明方式 - 显式类型标注也可用:
let name: String = "Alice"
4. 最佳实践
- 优先使用let:除非需要修改值,否则默认使用常量保证代码安全
- 命名规范:常量使用驼峰命名(如
maxWidth),变量使用描述性名称 - 及时初始化:常量必须在声明时赋值,变量可稍后赋值(但使用前必须初始化)
5. 常见错误
// 错误1:修改常量
let pi = 3.14
pi = 3.14159 // ❌ 编译错误:Cannot assign to value
// 错误2:未初始化变量
var score: Int
print(score) // ❌ 编译错误:Variable used before being initialized
// 错误3:重复声明
var x = 5
var x = 10 // ❌ 编译错误:Invalid redeclaration6. 扩展知识
- 值类型与引用类型:
let修饰值类型(如结构体)时完全不可变;修饰引用类型(如类)时,引用不可变但实例属性可能可变 - 延迟初始化:使用
lazy var延迟计算变量的初始值 - 类型安全:Swift要求明确指定可变性,减少运行时错误
7. 面试回答技巧
强调:"Swift鼓励使用let确保数据不可变性,这能预防意外修改导致的bug。在Xcode中,未使用的变量会触发警告,而常量不会,这体现了Swift的安全设计理念。"