⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

原始值可表达:让枚举安全映射外来数据而不崩溃

RawRepresentable 自动合成?探讨自定义 RawRepresentable 实现容错解析:当原始值无效时返回 nil 而非崩溃,并利用可选绑定优雅降级。 · 难度:入门 · +10XP

容错原始值映射

标准库的 RawRepresentable 在 init?(rawValue:) 中如果枚举没有对应的 case 会返回 nil。但很多人直接使用强制解包导致崩溃。本教程展示如何为来自 JSON 或数据库的整型/字符串编写安全的初始化器,并利用 Result 类型返回错误上下文。

enum Status: String {
    case active, inactive, pending
}
extension Status {
    init(safeRawValue: String) -> Result<Status, Error> {
        if let status = Status(rawValue: safeRawValue) {
            return .success(status)
        } else {
            return .failure(StatusError.unknownValue(safeRawValue))
        }
    }
}
let result = Status(safeRawValue: "deleted")
// .failure(StatusError.unknownValue("deleted"))
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 177 篇
0 完成
🔥 0