Swift 数据类型

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)

特性structclass
类型值类型引用类型
复制复制数据复制引用
继承不支持支持
析构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

十二、数据类型速查表

类型内存范围推荐场景
Int8 字节-2^63 ~ 2^63-1计数、索引
UInt8 字节0 ~ 2^64-1大数、位操作
Double8 字节高精度科学计算
Float4 字节低精度节省内存
String动态UTF-16文本
Bool1 字节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 种不同类型!

文章已创建 2481

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部