变量与常量 #

一、变量与常量概述 #

在Swift中,数据存储有两种方式:

  • 变量(Variable):使用 var 声明,值可以改变
  • 常量(Constant):使用 let 声明,值不可改变

二、变量(var) #

2.1 声明变量 #

swift
var name = "Swift"
var age = 25
var score = 95.5

name = "Swift 5.9"
age = 26
score = 98.0

2.2 显式类型声明 #

swift
var name: String = "Swift"
var age: Int = 25
var score: Double = 95.5
var isActive: Bool = true

2.3 先声明后赋值 #

swift
var message: String
message = "Hello"
message = "World"

2.4 多变量声明 #

swift
var x = 1, y = 2, z = 3
var a: Int, b: Int, c: Int
a = 10
b = 20
c = 30

三、常量(let) #

3.1 声明常量 #

swift
let pi = 3.14159
let language = "Swift"
let maxConnections = 100

pi = 3.14

3.2 显式类型声明 #

swift
let pi: Double = 3.14159
let language: String = "Swift"
let maxConnections: Int = 100

3.3 常量的使用场景 #

swift
let apiKey = "your-api-key"
let baseURL = "https://api.example.com"
let timeout: TimeInterval = 30.0
let maxRetryCount = 3

3.4 常量与引用类型 #

对于引用类型(如类),常量保证引用不变,但内容可变:

swift
class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

let person = Person(name: "张三")
person.name = "李四"

四、类型推断 #

Swift具有强大的类型推断能力,可以根据初始值自动推断类型。

4.1 基本类型推断 #

swift
let integer = 42
let double = 3.14
let string = "Hello"
let boolean = true

print(type(of: integer))
print(type(of: double))
print(type(of: string))
print(type(of: boolean))

4.2 数值类型推断 #

swift
let decimal = 10
let binary = 0b1010
let octal = 0o12
let hexadecimal = 0xA

let bigNumber = 1_000_000
let scientific = 1.5e2

4.3 类型推断的限制 #

swift
let value = 3
let result = value / 2

let valueDouble: Double = 3
let resultDouble = valueDouble / 2

五、命名规则 #

5.1 基本规则 #

swift
let name = "张三"
let userName = "李四"
let userAge = 25
let _private = "私有"
let π = 3.14159

5.2 避免的命名 #

swift
let String = "Hello"
let Int = 42
let var = "keyword"
let `var` = "keyword"

5.3 命名最佳实践 #

swift
let maxRetryCount = 3
let baseURL = "https://api.example.com"
let isLoggedIn = true
var currentUser: User?

六、作用域 #

6.1 全局变量 #

swift
let globalConstant = "全局常量"
var globalVariable = "全局变量"

func example() {
    print(globalConstant)
    print(globalVariable)
}

6.2 局部变量 #

swift
func calculate() {
    let localConstant = "局部常量"
    var localVariable = "局部变量"
    print(localConstant)
    print(localVariable)
}

print(localConstant)

6.3 嵌套作用域 #

swift
let x = 10

func outer() {
    let y = 20
    
    func inner() {
        let z = 30
        print(x)
        print(y)
        print(z)
    }
    
    inner()
}

七、类型注解 #

7.1 显式类型 #

swift
let name: String = "Swift"
var age: Int = 25
var score: Double = 95.5
var isActive: Bool = true

7.2 类型别名 #

swift
typealias Age = Int
typealias Name = String
typealias Completion = () -> Void

var age: Age = 25
var name: Name = "张三"
var callback: Completion = { }

7.3 集合类型 #

swift
var names: [String] = ["张三", "李四"]
var scores: [String: Int] = ["张三": 90, "李四": 85]
var uniqueNumbers: Set<Int> = [1, 2, 3]

八、最佳实践 #

8.1 优先使用常量 #

swift
let pi = 3.14159
let greeting = "Hello"
let maxValue = 100

var counter = 0
var items: [String] = []

8.2 有意义的命名 #

swift
let maxRetryCount = 3
let defaultTimeout = 30.0
let apiBaseURL = "https://api.example.com"

var currentUser: User?
var isLoading: Bool = false

8.3 避免魔法数字 #

swift
if score > 60 {
    print("及格")
}

let passingScore = 60
if score > passingScore {
    print("及格")
}

8.4 使用描述性常量 #

swift
let animationDuration = 0.3
let cornerRadius: CGFloat = 8.0
let cellIdentifier = "UserCell"

九、常见错误 #

9.1 类型不匹配 #

swift
var name = "Swift"
name = 42

9.2 常量重新赋值 #

swift
let pi = 3.14
pi = 3.14159

9.3 变量未初始化 #

swift
var message: String
print(message)
message = "Hello"

9.4 类型推断错误 #

swift
let result = 3 / 2
print(result)

let resultDouble: Double = 3
let preciseResult = resultDouble / 2

十、总结 #

本章学习了:

  • 变量(var):可变的值
  • 常量(let):不可变的值
  • 类型推断:Swift自动推断类型
  • 命名规则:有意义的命名

最佳实践:

  • 优先使用常量
  • 使用有意义的命名
  • 避免魔法数字
  • 显式声明复杂类型

下一章,我们将学习Swift的基本数据类型!

最后更新:2026-03-26