Swift 数据类型全解析(2025 最新)
掌握 Swift 的 9 大核心类型 + 高级用法,让你写出 类型安全、高性能 的代码!
一、基本数据类型(标量类型)
| 类型 | 说明 | 示例 |
|---|---|---|
Int | 有符号整数(64 位) | let age = 18 |
UInt | 无符号整数 | let count: UInt = 100 |
Double | 双精度浮点(推荐) | let pi = 3.14159 |
Float | 单精度浮点 | let f: Float = 3.14 |
Bool | 布尔值 | let isActive = true |
String | 字符串 | let name = "Swift" |
Character | 单个字符 | let c: Character = "A" |
// 类型推断(推荐)
let score = 95 // Int
let price = 9.99 // Double
let flag = false // Bool
二、字面量(Literals)
| 类型 | 写法 |
|---|---|
| 整数 | 42, 0b1010(二进制), 0o52(八进制), 0x2A(十六进制) |
| 浮点 | 3.14, 1.25e2(=125) |
| 字符串 | "Hello", """多行""" |
| 布尔 | true, false |
let binary = 0b1111_1111 // 255
let hex = 0xFF // 255
let grouped = 1_000_000 // 100万(可读性)
三、集合类型(Collection Types)
1. 数组 Array<T>
var numbers: [Int] = [1, 2, 3]
var empty: [String] = []
// 操作
numbers.append(4)
numbers.insert(0, at: 0)
numbers.remove(at: 1)
numbers[0] = 10
// 常用属性
numbers.count
numbers.isEmpty
numbers.first
numbers.last
数组是值类型,复制时会拷贝
2. 字典 Dictionary<Key, Value>
var scores: [String: Int] = [
"张三": 95,
"李四": 88
]
// 添加/修改
scores["王五"] = 70
// 安全读取
if let s = scores["李四"] {
print(s) // 88
}
// 默认值
let zhao = scores["赵六"] ?? 0
// 删除
scores["王五"] = nil
Key 必须 可哈希(String、Int 等符合
Hashable)
3. 集合 Set<T>
var colors: Set<String> = ["红", "绿", "蓝"]
colors.insert("黄")
colors.remove("绿")
// 集合运算
let setA: Set = [1, 2, 3]
let setB: Set = [3, 4, 5]
setA.union(setB) // 并集
setA.intersection(setB) // 交集
setA.subtracting(setB) // 差集
setA.isSubset(of: setB)
元素 无序、唯一
四、可选类型(Optional)—— 空安全核心!
var name: String? = "张三"
name = nil
// 解包方式
// 1. 强制解包(危险!)
print(name!) // nil 时崩溃
// 2. 可选绑定(推荐)
if let n = name {
print("名字:\(n)")
}
// 3. 空合运算符
let display = name ?? "匿名"
// 4. 可选链
let length = name?.count
可选链(Optional Chaining)
struct Dog {
var name = "旺财"
}
struct Person {
var dog: Dog?
}
let person: Person? = Person()
let dogName = person?.dog?.name // String?
五、类型别名(Type Alias)
typealias ID = Int
typealias Score = Int
typealias UserInfo = [String: String]
let userID: ID = 1001
六、元组(Tuple)—— 轻量级数据结构
// 1. 命名元组
let http404 = (code: 404, message: "Not Found")
print(http404.message)
// 2. 匿名元组
let point = (x: 10, y: 20)
let (x, y) = point
print(x) // 10
// 3. 下标访问
let status = (200, "OK")
print(status.0) // 200
// 4. 忽略部分
let (_, msg) = status
print(msg) // OK
适合:返回值多个值、临时数据分组
七、枚举(Enum)
1. 基本枚举
enum Direction {
case up, down, left, right
}
let move = Direction.up
2. 带关联值(Associated Values)
enum Result {
case success(String)
case failure(Error)
case loading(Double) // 进度 0.0~1.0
}
let result = Result.success("登录成功")
3. 带原始值(Raw Values)
enum Grade: String {
case excellent = "A"
case good = "B"
}
print(Grade.excellent.rawValue) // "A"
4. 枚举方法
enum Compass {
case north, south, east, west
func opposite() -> Compass {
switch self {
case .north: return .south
case .south: return .north
case .east: return .west
case .west: return .east
}
}
}
八、结构体(Struct) vs 类(Class)
| 特性 | struct | class |
|---|---|---|
| 类型 | 值类型 | 引用类型 |
| 复制 | 复制数据 | 复制引用 |
| 继承 | 不支持 | 支持 |
| 析构 | 无 | 有 deinit |
struct Point {
var x, y: Int
}
class Car {
var speed = 0
deinit { print("车被释放") }
}
九、Any、AnyObject、AnyHashable
| 类型 | 说明 |
|---|---|
Any | 任意类型(包括函数、结构体等) |
AnyObject | 任意类类型 |
AnyHashable | 可哈希的任意类型(用于字典 key) |
var things: [Any] = []
things.append(0)
things.append("hello")
things.append({ print("闭包") })
十、类型转换(Type Casting)
class Animal { }
class Dog: Animal { func bark() { print("汪") } }
class Cat: Animal { func meow() { print("喵") } }
let pets: [Animal] = [Dog(), Cat(), Dog()]
// 向下转型
for pet in pets {
if let dog = pet as? Dog {
dog.bark()
} else if let cat = pet as? Cat {
cat.meow()
}
}
// AnyObject 转换
let objects: [AnyObject] = [Dog(), Cat()]
十一、类型安全与推断
let a = 42 // Int
let b = 3.14 // Double
// let c = a + b // 错误!类型不匹配
// 强制转换
let sum = Double(a) + b // 45.14
十二、数据类型速查表
| 类型 | 内存 | 范围 | 推荐场景 |
|---|---|---|---|
Int | 8 字节 | -2^63 ~ 2^63-1 | 计数、索引 |
UInt | 8 字节 | 0 ~ 2^64-1 | 大数、位操作 |
Double | 8 字节 | 高精度 | 科学计算 |
Float | 4 字节 | 低精度 | 节省内存 |
String | 动态 | UTF-16 | 文本 |
Bool | 1 字节 | true/false | 条件判断 |
十三、实战小练习
// 1. 创建一个学生成绩字典
var students: [String: [String: Int]] = [
"张三": ["数学": 95, "英语": 88],
"李四": ["数学": 82, "英语": 90]
]
// 2. 计算某科平均分
func average(of subject: String) -> Double? {
let scores = students.values.compactMap { $0[subject] }
guard !scores.isEmpty else { return nil }
return Double(scores.reduce(0, +)) / Double(scores.count)
}
print(average(of: "数学") ?? 0) // 88.5
// 3. 可选链 + 元组
typealias User = (id: Int, name: String?, age: Int?)
let user: User? = (1, "小明", nil)
let nameLength = user?.name?.count ?? 0 // 2
学习建议
| 目标 | 练习 |
|---|---|
| 掌握可选 | 写 10 个 String? 解包例子 |
| 理解集合 | 实现 Set 并集/交集函数 |
| 用元组 | 返回 (min, max, avg) |
| 枚举实战 | 实现状态机(登录/加载/成功/失败) |
你已掌握 Swift 所有核心数据类型!
回复关键词继续深入:
Swift 可选类型进阶Swift 泛型Swift 内存管理SwiftUI 数据绑定
现在就打开 Playground,试试 Any 存 5 种不同类型!