如何让 enum 符合 Decodable 协议:Swift 完整指南
大家好!我是一名 iOS 开发新手,遇到了将 JSON 解码为 enum 的问题。
我有一个用于订单状态的 enum:
```swift
enum OrderStatus: String {
case pending
case confirmed
case shipped
case delivered
case cancelled
}
```
我从服务器收到 JSON:
```json
{
"id": 1234,
"status": "pending"
}
```
我尝试使用 JSONDecoder 进行解码:
```swift
struct Order: Decodable {
let id: Int
let status: OrderStatus
}
```
但 Xcode 报错:"Type 'OrderStatus' does not conform to protocol 'Decodable'"
我已经为 enum 添加了 String 作为 rawValue,以为这样会有效。但并没有。我哪里做错了?是否需要自己实现 init(from:) 方法,还是有更简单的方法?
另外,如果服务器发送的是数字而不是字符串(例如,0 表示 pending,1 表示 confirmed),或者 JSON 中出现了 enum 中不存在的未知值,该怎么办?提前感谢帮助!