Swift Codable 完整指南:协议、方法与实战示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift Codable 完整指南:协议、方法与实战示例

1. 什么是 Codable?为什么需要它?

Codable 是 Swift 语言内置的协议(实际上是 Encodable & Decodable 的类型别名),自 Swift 4 起引入。它提供了一种声明式的方法,用于将自定义数据类型序列化为 JSON、Property List (plist) 等格式,或从这些格式反序列化回来。你不再需要手动编写繁琐的代码来将结构体转换为字典或反之,Codable 会根据模型的属性自动生成编码/解码逻辑。

为什么需要它?在现代 iOS/macOS 开发中,几乎每个应用都需要与服务器 API 交互,以 JSON 格式接收和发送数据。如果没有 Codable,开发者必须手动编写循环、检查类型、处理可选值,并编写反向解析器。Codable 解决了这一问题,使代码更简洁、更安全,并显著缩短开发时间。它也是 Apple 生态系统中处理 JSON 的事实标准。

Codable 基于 Encodable(将 Swift 类型转换为数据)和 Decodable(将数据转换为 Swift 类型)两个协议。将两者结合,即可实现完整的序列化循环。该协议与 JSONEncoder 和 JSONDecoder 紧密集成,它们是处理 JSON 的主要工具。

2. 安装指南

Codable 是 Swift 标准库(Foundation)的一部分。无需任何额外安装。你不需要使用 pip、npm、CocoaPods 或 Swift Package Manager 来引入它。只需在你的文件中导入 Foundation 即可:

import Foundation

如果你在 Linux 环境下使用 Swift(例如通过 Swift Package Manager),Codable 同样开箱即用。对于 Vapor 等服务器端框架,Codable 也是默认使用的。

3. 快速上手——最小工作示例

让我们创建一个简单的用户结构体,并将其序列化/反序列化为 JSON。

import Foundation

// 1. 定义一个遵循 Codable 协议的模型
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

// 2. 创建一个实例
let user = User(id: 1, name: "Alice", email: "alice@example.com")

// 3. 编码为 JSON
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted // 美化输出

do {
    let jsonData = try encoder.encode(user)
    if let jsonString = String(data: jsonData, encoding: .utf8) {
        print("JSON: \n\(jsonString)")
    }

    // 4. 解码回 Swift 对象
    let decoder = JSONDecoder()
    let decodedUser = try decoder.decode(User.self, from: jsonData)
    print("解码后的用户: \(decodedUser.name), 邮箱: \(decodedUser.email)")
} catch {
    print("错误: \(error)")
}

控制台输出:

JSON:
{
  "id" : 1,
  "name" : "Alice",
  "email" : "alice@example.com"
}
解码后的用户: Alice, 邮箱: alice@example.com

如你所见,仅需几行代码,序列化就完成了。

4. 核心方法/函数/类详解

下面介绍 Codable 中你将经常使用的关键组件。

推荐